aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/pdf/SkPDFBitmap.cpp
diff options
context:
space:
mode:
authorGravatar Hal Canary <halcanary@google.com>2017-07-18 10:28:31 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-18 19:33:34 +0000
commit4f29c20f20ce62150998786be8b9f8a81a901d72 (patch)
tree82e9ce0a4a2b83261f610ddbfe233728285ed26a /src/pdf/SkPDFBitmap.cpp
parente46828675c617fd636e8a64f3be60f7f396c35f1 (diff)
SkPDF: Re-use Jpeg Image Shaders
Also, de-dup shader better. - SkBitmapKeyFromImage function factors out image de-dup code. - SkPDFUtils::ToBitmap funtion factors out to-bitmap code - make_image_shader function now takes Image rather than Bitmap. All tests render the same. Some are significantly smaller PDFs. Change-Id: Id8dd36b31c8e573f44a5e9f6058d5a1d622b6385 Reviewed-on: https://skia-review.googlesource.com/24081 Reviewed-by: Florin Malita <fmalita@chromium.org> Commit-Queue: Hal Canary <halcanary@google.com>
Diffstat (limited to 'src/pdf/SkPDFBitmap.cpp')
-rw-r--r--src/pdf/SkPDFBitmap.cpp28
1 files changed, 11 insertions, 17 deletions
diff --git a/src/pdf/SkPDFBitmap.cpp b/src/pdf/SkPDFBitmap.cpp
index d0dcce6b3c..e28800bf99 100644
--- a/src/pdf/SkPDFBitmap.cpp
+++ b/src/pdf/SkPDFBitmap.cpp
@@ -5,35 +5,27 @@
* found in the LICENSE file.
*/
+#include "SkPDFBitmap.h"
+
#include "SkColorPriv.h"
#include "SkData.h"
#include "SkDeflate.h"
-#include "SkImage_Base.h"
+#include "SkImage.h"
#include "SkJpegInfo.h"
-#include "SkPDFBitmap.h"
#include "SkPDFCanon.h"
#include "SkPDFTypes.h"
+#include "SkPDFUtils.h"
#include "SkStream.h"
#include "SkUnPreMultiply.h"
-void image_get_ro_pixels(const SkImage* image, SkBitmap* dst) {
- SkColorSpace* legacyColorSpace = nullptr;
- if(as_IB(image)->getROPixels(dst, legacyColorSpace)
- && dst->dimensions() == image->dimensions()) {
- return;
- }
- // no pixels or wrong size: fill with zeros.
- dst->setInfo(SkImageInfo::MakeN32(image->width(), image->height(), image->alphaType()));
-}
-
bool image_compute_is_opaque(const SkImage* image) {
if (image->isOpaque()) {
return true;
}
// keep output PDF small at cost of possible resource use.
SkBitmap bm;
- image_get_ro_pixels(image, &bm);
- return SkBitmap::ComputeIsOpaque(bm);
+ // if image can not be read, treat as transparent.
+ return SkPDFUtils::ToBitmap(image, &bm) && SkBitmap::ComputeIsOpaque(bm);
}
////////////////////////////////////////////////////////////////////////////////
@@ -286,7 +278,10 @@ static void emit_image_xobject(SkWStream* stream,
const sk_sp<SkPDFObject>& smask,
const SkPDFObjNumMap& objNumMap) {
SkBitmap bitmap;
- image_get_ro_pixels(image, &bitmap); // TODO(halcanary): test
+ if (!SkPDFUtils::ToBitmap(image, &bitmap)) {
+ // no pixels or wrong size: fill with zeros.
+ bitmap.setInfo(SkImageInfo::MakeN32(image->width(), image->height(), image->alphaType()));
+ }
// Write to a temporary buffer to get the compressed length.
SkDynamicMemoryWStream buffer;
@@ -433,8 +428,7 @@ sk_sp<SkPDFObject> SkPDFCreateBitmapObject(sk_sp<SkImage> image,
if (pixelSerializer) {
SkBitmap bm;
SkPixmap pmap;
- SkColorSpace* legacyColorSpace = nullptr;
- if (as_IB(image.get())->getROPixels(&bm, legacyColorSpace) && bm.peekPixels(&pmap)) {
+ if (SkPDFUtils::ToBitmap(image.get(), &bm) && bm.peekPixels(&pmap)) {
data = pixelSerializer->encodeToData(pmap);
if (data && SkIsJFIF(data.get(), &info)) {
bool yuv = info.fType == SkJFIFInfo::kYCbCr;