diff options
author | halcanary <halcanary@google.com> | 2015-12-10 08:59:43 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-10 08:59:43 -0800 |
commit | 712fdf7603c62820b21174da9b0a2071c174936b (patch) | |
tree | 52f88b6e297f2bce7b940adb9cfe052178076758 /src/pdf/SkPDFBitmap.cpp | |
parent | a06e6ab3fafb8c8712bc296f72c3f8b88856f1fe (diff) |
SkDocument::setDCTEncoder() for old versions of webkit
Review URL: https://codereview.chromium.org/1505763003
Diffstat (limited to 'src/pdf/SkPDFBitmap.cpp')
-rw-r--r-- | src/pdf/SkPDFBitmap.cpp | 18 |
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 |