static SkImage* create_rasterproc_image(RasterDataHolder* dataHolder) { SkASSERT(dataHolder); SkImageInfo info; SkAutoTUnref<SkData> data(create_image_data(&info)); dataHolder->fData.reset(SkRef(data.get())); return SkImage::NewFromRaster(info, data->data(), info.minRowBytes(), RasterDataHolder::Release, dataHolder); }
static SkImage* create_codec_image() { SkImageInfo info; SkAutoTUnref<SkData> data(create_image_data(&info)); SkBitmap bitmap; bitmap.installPixels(info, data->writable_data(), info.minRowBytes()); SkAutoTUnref<SkData> src( SkImageEncoder::EncodeData(bitmap, SkImageEncoder::kPNG_Type, 100)); return SkImage::NewFromEncoded(src); }
static int unoptimize_image(Gif_Stream *gfs, Gif_Image *gfi, uint16_t *screen) { unsigned size = gfs->screen_width * gfs->screen_height; int used_transparent; uint8_t *new_data = Gif_NewArray(uint8_t, size); uint16_t *new_screen = screen; if (!new_data) return 0; /* Oops! May need to uncompress it */ Gif_UncompressImage(gfs, gfi); Gif_ReleaseCompressedImage(gfi); if (gfi->disposal == GIF_DISPOSAL_PREVIOUS) { new_screen = Gif_NewArray(uint16_t, size); if (!new_screen) return 0; memcpy(new_screen, screen, size * sizeof(uint16_t)); } put_image_in_screen(gfs, gfi, new_screen); if (!create_image_data(gfs, gfi, new_screen, new_data, &used_transparent)) { Gif_DeleteArray(new_data); return 0; } if (gfi->disposal == GIF_DISPOSAL_PREVIOUS) Gif_DeleteArray(new_screen); else if (gfi->disposal == GIF_DISPOSAL_BACKGROUND) put_background_in_screen(gfs, gfi, screen); gfi->left = 0; gfi->top = 0; gfi->width = gfs->screen_width; gfi->height = gfs->screen_height; gfi->disposal = used_transparent; Gif_SetUncompressedImage(gfi, new_data, Gif_Free, 0); return 1; }
static SkImage* create_data_image() { SkImageInfo info; SkAutoTUnref<SkData> data(create_image_data(&info)); return SkImage::NewRasterData(info, data, info.minRowBytes()); }