• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2010 The Android Open Source Project
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 
10 #ifndef SkPDFImage_DEFINED
11 #define SkPDFImage_DEFINED
12 
13 #include "SkPDFStream.h"
14 #include "SkPDFTypes.h"
15 #include "SkRefCnt.h"
16 
17 class SkBitmap;
18 class SkPaint;
19 class SkPDFCatalog;
20 struct SkIRect;
21 
22 /** \class SkPDFImage
23 
24     An image XObject.
25 */
26 
27 // We could play the same trick here as is done in SkPDFGraphicState, storing
28 // a copy of the Bitmap object (not the pixels), the pixel generation number,
29 // and settings used from the paint to canonicalize image objects.
30 class SkPDFImage : public SkPDFStream {
31 public:
32     /** Create a new Image XObject to represent the passed bitmap.
33      *  @param bitmap   The image to encode.
34      *  @param srcRect  The rectangle to cut out of bitmap.
35      *  @param paint    Used to calculate alpha, masks, etc.
36      *  @return  The image XObject or NUll if there is nothing to draw for
37      *           the given parameters.
38      */
39     static SkPDFImage* CreateImage(const SkBitmap& bitmap,
40                                    const SkIRect& srcRect,
41                                    const SkPaint& paint);
42 
43     virtual ~SkPDFImage();
44 
45     /** Add a Soft Mask (alpha or shape channel) to the image.  Refs mask.
46      *  @param mask A gray scale image representing the mask.
47      *  @return The mask argument is returned.
48      */
49     SkPDFImage* addSMask(SkPDFImage* mask);
50 
51     // The SkPDFObject interface.
52     virtual void getResources(SkTDArray<SkPDFObject*>* resourceList);
53 
54 private:
55     SkTDArray<SkPDFObject*> fResources;
56 
57     /** Create a PDF image XObject. Entries for the image properties are
58      *  automatically added to the stream dictionary.
59      *  @param imageData  The final raw bits representing the image.
60      *  @param bitmap     The image parameters to use (Config, etc).
61      *  @param srcRect    The clipping applied to bitmap before generating
62      *                    imageData.
63      *  @param alpha      Is this the alpha channel of the bitmap.
64      *  @param paint      Used to calculate alpha, masks, etc.
65      */
66     SkPDFImage(SkStream* imageData, const SkBitmap& bitmap,
67                const SkIRect& srcRect, bool alpha, const SkPaint& paint);
68 };
69 
70 #endif
71