diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/pdf/SkPDFImage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/pdf/SkPDFImage.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,98 @@ + +/* + * 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& knownResourceObjects, + SkTSet* newResourceObjects); + +private: + SkBitmap fBitmap; + bool fIsAlpha; + SkIRect fSrcRect; + SkPicture::EncodeBitmap fEncoder; + bool fStreamValid; + + SkTDArray 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