aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/pdf/SkPDFBitmap.cpp
diff options
context:
space:
mode:
authorGravatar halcanary <halcanary@google.com>2015-12-10 08:59:43 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2015-12-10 08:59:43 -0800
commit712fdf7603c62820b21174da9b0a2071c174936b (patch)
tree52f88b6e297f2bce7b940adb9cfe052178076758 /src/pdf/SkPDFBitmap.cpp
parenta06e6ab3fafb8c8712bc296f72c3f8b88856f1fe (diff)
SkDocument::setDCTEncoder() for old versions of webkit
Diffstat (limited to 'src/pdf/SkPDFBitmap.cpp')
-rw-r--r--src/pdf/SkPDFBitmap.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/pdf/SkPDFBitmap.cpp b/src/pdf/SkPDFBitmap.cpp
index 0c53da6974..4e49db518d 100644
--- a/src/pdf/SkPDFBitmap.cpp
+++ b/src/pdf/SkPDFBitmap.cpp
@@ -468,7 +468,8 @@ void PDFJpegBitmap::emitObject(SkWStream* stream,
////////////////////////////////////////////////////////////////////////////////
-SkPDFObject* SkPDFCreateBitmapObject(const SkImage* image) {
+SkPDFObject* SkPDFCreateBitmapObject(const SkImage* image,
+ SkPixelSerializer* pixelSerializer) {
SkAutoTUnref<SkData> data(image->refEncoded());
SkJFIFInfo info;
if (data && SkIsJFIF(data, &info)) {
@@ -481,6 +482,21 @@ SkPDFObject* SkPDFCreateBitmapObject(const SkImage* image) {
return new PDFJpegBitmap(info.fSize, data, yuv);
}
}
+
+ if (pixelSerializer) {
+ SkBitmap bm;
+ SkAutoPixmapUnlock apu;
+ if (as_IB(image)->getROPixels(&bm) && bm.requestLock(&apu)) {
+ data.reset(pixelSerializer->encode(apu.pixmap()));
+ if (data && SkIsJFIF(data, &info)) {
+ bool yuv = info.fType == SkJFIFInfo::kYCbCr;
+ if (info.fSize == image->dimensions()) { // Sanity check.
+ return new PDFJpegBitmap(info.fSize, data, yuv);
+ }
+ }
+ }
+ }
+
SkPDFObject* smask =
image_compute_is_opaque(image) ? nullptr : new PDFAlphaBitmap(image);
#ifdef SK_PDF_IMAGE_STATS