1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 29b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2010 The Android Open Source Project 49b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 79b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org */ 89b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org 9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 109b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org#ifndef SkPDFImage_DEFINED 119b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org#define SkPDFImage_DEFINED 129b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org 13608ea6508ae2e9ea05ea863ba50fc27d44d2eae9commit-bot@chromium.org#include "SkPicture.h" 14d9dfa18372119c8e1318125d2075fa80e0819094edisonn@google.com#include "SkPDFDevice.h" 15181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org#include "SkPDFStream.h" 169b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org#include "SkPDFTypes.h" 179b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org#include "SkRefCnt.h" 189b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org 199b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.orgclass SkBitmap; 209b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.orgclass SkPDFCatalog; 219db86bb9cd1b77be0afc504ccc07026e4282d7e7ctguil@chromium.orgstruct SkIRect; 229b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org 239b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org/** \class SkPDFImage 249b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org 259b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org An image XObject. 269b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org*/ 279b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org 289b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org// We could play the same trick here as is done in SkPDFGraphicState, storing 299b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org// a copy of the Bitmap object (not the pixels), the pixel generation number, 309b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org// and settings used from the paint to canonicalize image objects. 31181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.orgclass SkPDFImage : public SkPDFStream { 329b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.orgpublic: 331cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org /** Create a new Image XObject to represent the passed bitmap. 341cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org * @param bitmap The image to encode. 351cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org * @param srcRect The rectangle to cut out of bitmap. 361cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org * @param paint Used to calculate alpha, masks, etc. 371cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org * @return The image XObject or NUll if there is nothing to draw for 381cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org * the given parameters. 399b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org */ 401cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org static SkPDFImage* CreateImage(const SkBitmap& bitmap, 41d9dfa18372119c8e1318125d2075fa80e0819094edisonn@google.com const SkIRect& srcRect, 42608ea6508ae2e9ea05ea863ba50fc27d44d2eae9commit-bot@chromium.org SkPicture::EncodeBitmap encoder); 431cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org 449b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org virtual ~SkPDFImage(); 459b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org 46f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org /** Add a Soft Mask (alpha or shape channel) to the image. Refs mask. 471cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org * @param mask A gray scale image representing the mask. 48f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org * @return The mask argument is returned. 491cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org */ 50f7c157610ff85f7323f5e213b62478dcc66edbecvandebo@chromium.org SkPDFImage* addSMask(SkPDFImage* mask); 511cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org 52181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org bool isEmpty() { 53181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org return fSrcRect.isEmpty(); 54181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org } 55181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org 569b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org // The SkPDFObject interface. 576addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com virtual void getResources(const SkTSet<SkPDFObject*>& knownResourceObjects, 586addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com SkTSet<SkPDFObject*>* newResourceObjects); 591cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org 601cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.orgprivate: 61181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org SkBitmap fBitmap; 62181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org bool fIsAlpha; 63181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org SkIRect fSrcRect; 64608ea6508ae2e9ea05ea863ba50fc27d44d2eae9commit-bot@chromium.org SkPicture::EncodeBitmap fEncoder; 65181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org bool fStreamValid; 66181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org 671cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org SkTDArray<SkPDFObject*> fResources; 681cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org 691cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org /** Create a PDF image XObject. Entries for the image properties are 701cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org * automatically added to the stream dictionary. 71181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org * @param stream The image stream. May be NULL. Otherwise, this 72181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org * (instead of the input bitmap) will be used as the 73181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org * PDF's content stream, possibly with lossless encoding. 74181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org * @param bitmap The image. If a stream is not given, its color data 75181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org * will be used as the image. If a stream is given, this 76181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org * is used for configuration only. 77181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org * @param isAlpha Whether or not this is the alpha of an image. 781cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org * @param srcRect The clipping applied to bitmap before generating 791cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org * imageData. 80181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org * @param encoder A function used to encode the bitmap for compression. 81181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org * May be NULL. 82181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org */ 83181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org SkPDFImage(SkStream* stream, const SkBitmap& bitmap, bool isAlpha, 84608ea6508ae2e9ea05ea863ba50fc27d44d2eae9commit-bot@chromium.org const SkIRect& srcRect, SkPicture::EncodeBitmap encoder); 85181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org 86181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org /** Copy constructor, used to generate substitutes. 87181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org * @param image The SkPDFImage to copy. 881cfa2c458626abe952a63b1a9397d8e496a134d6vandebo@chromium.org */ 89181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org SkPDFImage(SkPDFImage& pdfImage); 90181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org 91181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org // Populate the stream dictionary. This method returns false if 92181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org // fSubstitute should be used. 93181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org virtual bool populate(SkPDFCatalog* catalog); 94181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org 95181fcb4a21cb87292eded6675a1df05cf9c3aacccommit-bot@chromium.org typedef SkPDFStream INHERITED; 969b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org}; 979b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org 989b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org#endif 99