本文整理汇总了C++中SkAutoMalloc::alloc方法的典型用法代码示例。如果您正苦于以下问题:C++ SkAutoMalloc::alloc方法的具体用法?C++ SkAutoMalloc::alloc怎么用?C++ SkAutoMalloc::alloc使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SkAutoMalloc
的用法示例。
在下文中一共展示了SkAutoMalloc::alloc方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: onDecode
bool SkJPEGImageDecoder::onDecode(SkStream* stream, SkBitmap* bm,
SkBitmap::Config prefConfig, Mode mode) {
#ifdef TIME_DECODE
AutoTimeMillis atm("JPEG Decode");
#endif
SkAutoMalloc srcStorage;
JPEGAutoClean autoClean;
jpeg_decompress_struct cinfo;
sk_error_mgr sk_err;
sk_source_mgr sk_stream(stream);
cinfo.err = jpeg_std_error(&sk_err);
sk_err.error_exit = sk_error_exit;
// All objects need to be instantiated before this setjmp call so that
// they will be cleaned up properly if an error occurs.
if (setjmp(sk_err.fJmpBuf)) {
return false;
}
jpeg_create_decompress(&cinfo);
autoClean.set(&cinfo);
//jpeg_stdio_src(&cinfo, file);
cinfo.src = &sk_stream;
jpeg_read_header(&cinfo, true);
/* Try to fulfill the requested sampleSize. Since jpeg can do it (when it
can) much faster that we, just use their num/denom api to approximate
the size.
*/
int sampleSize = this->getSampleSize();
cinfo.dct_method = JDCT_IFAST;
cinfo.scale_num = 1;
cinfo.scale_denom = sampleSize;
/* image_width and image_height are the original dimensions, available
after jpeg_read_header(). To see the scaled dimensions, we have to call
jpeg_start_decompress(), and then read output_width and output_height.
*/
jpeg_start_decompress(&cinfo);
/* If we need to better match the request, we might examine the image and
output dimensions, and determine if the downsampling jpeg provided is
not sufficient. If so, we can recompute a modified sampleSize value to
make up the difference.
To skip this additional scaling, just set sampleSize = 1; below.
*/
sampleSize = sampleSize * cinfo.output_width / cinfo.image_width;
// check for supported formats
bool isRGB; // as opposed to gray8
if (3 == cinfo.num_components && JCS_RGB == cinfo.out_color_space) {
isRGB = true;
} else if (1 == cinfo.num_components &&
JCS_GRAYSCALE == cinfo.out_color_space) {
isRGB = false; // could use Index8 config if we want...
} else {
SkDEBUGF(("SkJPEGImageDecoder: unsupported jpeg colorspace %d with %d components\n",
cinfo.jpeg_color_space, cinfo.num_components));
return false;
}
SkBitmap::Config config = prefConfig;
// if no user preference, see what the device recommends
if (config == SkBitmap::kNo_Config)
config = SkImageDecoder::GetDeviceConfig();
// only these make sense for jpegs
if (config != SkBitmap::kARGB_8888_Config &&
config != SkBitmap::kARGB_4444_Config &&
config != SkBitmap::kRGB_565_Config) {
config = SkBitmap::kARGB_8888_Config;
}
// should we allow the Chooser (if present) to pick a config for us???
if (!this->chooseFromOneChoice(config, cinfo.output_width,
cinfo.output_height)) {
return false;
}
SkScaledBitmapSampler sampler(cinfo.output_width, cinfo.output_height,
sampleSize);
bm->setConfig(config, sampler.scaledWidth(), sampler.scaledHeight());
// jpegs are always opauqe (i.e. have no per-pixel alpha)
bm->setIsOpaque(true);
if (SkImageDecoder::kDecodeBounds_Mode == mode) {
return true;
}
if (!this->allocPixelRef(bm, NULL)) {
return false;
}
//.........这里部分代码省略.........