SkData* SkImage::encode(SkPixelSerializer* serializer) const { DefaultSerializer defaultSerializer; SkPixelSerializer* effectiveSerializer = serializer ? serializer : &defaultSerializer; SkAutoTUnref<SkData> encoded(this->refEncoded()); if (encoded && effectiveSerializer->useEncodedData(encoded->data(), encoded->size())) { return encoded.detach(); } SkBitmap bm; SkAutoPixmapUnlock apu; if (as_IB(this)->getROPixels(&bm) && bm.requestLock(&apu)) { const SkPixmap& pmap = apu.pixmap(); return effectiveSerializer->encodePixels(pmap.info(), pmap.addr(), pmap.rowBytes()); } return nullptr; }
SkData* SkImage::encode(SkPixelSerializer* serializer) const { SkAutoTUnref<SkPixelSerializer> defaultSerializer; SkPixelSerializer* effectiveSerializer = serializer; if (!effectiveSerializer) { defaultSerializer.reset(SkImageEncoder::CreatePixelSerializer()); SkASSERT(defaultSerializer.get()); effectiveSerializer = defaultSerializer.get(); } SkAutoTUnref<SkData> encoded(this->refEncoded()); if (encoded && effectiveSerializer->useEncodedData(encoded->data(), encoded->size())) { return encoded.detach(); } SkBitmap bm; SkAutoPixmapUnlock apu; if (as_IB(this)->getROPixels(&bm) && bm.requestLock(&apu)) { return effectiveSerializer->encode(apu.pixmap()); } return nullptr; }