| /* | |
| * Copyright 2010 The Android Open Source Project | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef SkPDFImage_DEFINED | |
| #define SkPDFImage_DEFINED | |
| #include "SkPicture.h" | |
| #include "SkPDFDevice.h" | |
| #include "SkPDFStream.h" | |
| #include "SkPDFTypes.h" | |
| #include "SkRefCnt.h" | |
| class SkBitmap; | |
| class SkPDFCatalog; | |
| struct SkIRect; | |
| /** \class SkPDFImage | |
| An image XObject. | |
| */ | |
| // We could play the same trick here as is done in SkPDFGraphicState, storing | |
| // a copy of the Bitmap object (not the pixels), the pixel generation number, | |
| // and settings used from the paint to canonicalize image objects. | |
| class SkPDFImage : public SkPDFStream { | |
| public: | |
| /** Create a new Image XObject to represent the passed bitmap. | |
| * @param bitmap The image to encode. | |
| * @param srcRect The rectangle to cut out of bitmap. | |
| * @param paint Used to calculate alpha, masks, etc. | |
| * @return The image XObject or NUll if there is nothing to draw for | |
| * the given parameters. | |
| */ | |
| static SkPDFImage* CreateImage(const SkBitmap& bitmap, | |
| const SkIRect& srcRect, | |
| SkPicture::EncodeBitmap encoder); | |
| virtual ~SkPDFImage(); | |
| /** Add a Soft Mask (alpha or shape channel) to the image. Refs mask. | |
| * @param mask A gray scale image representing the mask. | |
| * @return The mask argument is returned. | |
| */ | |
| SkPDFImage* addSMask(SkPDFImage* mask); | |
| bool isEmpty() { | |
| return fSrcRect.isEmpty(); | |
| } | |
| // The SkPDFObject interface. | |
| virtual void getResources(const SkTSet<SkPDFObject*>& knownResourceObjects, | |
| SkTSet<SkPDFObject*>* newResourceObjects); | |
| private: | |
| SkBitmap fBitmap; | |
| bool fIsAlpha; | |
| SkIRect fSrcRect; | |
| SkPicture::EncodeBitmap fEncoder; | |
| bool fStreamValid; | |
| SkTDArray<SkPDFObject*> fResources; | |
| /** Create a PDF image XObject. Entries for the image properties are | |
| * automatically added to the stream dictionary. | |
| * @param stream The image stream. May be NULL. Otherwise, this | |
| * (instead of the input bitmap) will be used as the | |
| * PDF's content stream, possibly with lossless encoding. | |
| * @param bitmap The image. If a stream is not given, its color data | |
| * will be used as the image. If a stream is given, this | |
| * is used for configuration only. | |
| * @param isAlpha Whether or not this is the alpha of an image. | |
| * @param srcRect The clipping applied to bitmap before generating | |
| * imageData. | |
| * @param encoder A function used to encode the bitmap for compression. | |
| * May be NULL. | |
| */ | |
| SkPDFImage(SkStream* stream, const SkBitmap& bitmap, bool isAlpha, | |
| const SkIRect& srcRect, SkPicture::EncodeBitmap encoder); | |
| /** Copy constructor, used to generate substitutes. | |
| * @param image The SkPDFImage to copy. | |
| */ | |
| SkPDFImage(SkPDFImage& pdfImage); | |
| // Populate the stream dictionary. This method returns false if | |
| // fSubstitute should be used. | |
| virtual bool populate(SkPDFCatalog* catalog); | |
| typedef SkPDFStream INHERITED; | |
| }; | |
| #endif |