SkData* CompressBitmapToFormat(const SkPixmap& pixmap, Format format) { int compressedDataSize = GetCompressedDataSize(format, pixmap.width(), pixmap.height()); if (compressedDataSize < 0) { return NULL; } const uint8_t* src = reinterpret_cast<const uint8_t*>(pixmap.addr()); SkData* dst = SkData::NewUninitialized(compressedDataSize); if (!CompressBufferToFormat((uint8_t*)dst->writable_data(), src, pixmap.colorType(), pixmap.width(), pixmap.height(), pixmap.rowBytes(), format)) { dst->unref(); dst = NULL; } return dst; }
SkData *CompressBitmapToFormat(const SkBitmap &bitmap, Format format) { SkAutoLockPixels alp(bitmap); int compressedDataSize = GetCompressedDataSize(format, bitmap.width(), bitmap.height()); if (compressedDataSize < 0) { return NULL; } const uint8_t* src = reinterpret_cast<const uint8_t*>(bitmap.getPixels()); uint8_t* dst = reinterpret_cast<uint8_t*>(sk_malloc_throw(compressedDataSize)); if (CompressBufferToFormat(dst, src, bitmap.colorType(), bitmap.width(), bitmap.height(), bitmap.rowBytes(), format)) { return SkData::NewFromMalloc(dst, compressedDataSize); } sk_free(dst); return NULL; }