SkImage.h revision b947625800a26194fcf63d7b57dadb1a63677f6a
1/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkImage_DEFINED
9#define SkImage_DEFINED
10
11#include "SkRefCnt.h"
12#include "SkScalar.h"
13
14class SkData;
15class SkCanvas;
16class SkPaint;
17class SkShader;
18class GrContext;
19class GrTexture;
20
21// need for TileMode
22#include "SkShader.h"
23
24////// EXPERIMENTAL
25
26/**
27 *  SkImage is an abstraction for drawing a rectagle of pixels, though the
28 *  particular type of image could be actually storing its data on the GPU, or
29 *  as drawing commands (picture or PDF or otherwise), ready to be played back
30 *  into another canvas.
31 *
32 *  The content of SkImage is always immutable, though the actual storage may
33 *  change, if for example that image can be re-created via encoded data or
34 *  other means.
35 */
36class SkImage : public SkRefCnt {
37public:
38    SK_DECLARE_INST_COUNT(SkImage)
39
40    enum ColorType {
41        kAlpha_8_ColorType,
42        kRGB_565_ColorType,
43        kRGBA_8888_ColorType,
44        kBGRA_8888_ColorType,
45        kPMColor_ColorType,
46
47        kLastEnum_ColorType = kPMColor_ColorType
48    };
49
50    enum AlphaType {
51        kIgnore_AlphaType,
52        kOpaque_AlphaType,
53        kPremul_AlphaType,
54        kUnpremul_AlphaType,
55
56        kLastEnum_AlphaType = kUnpremul_AlphaType
57    };
58
59    struct Info {
60        int         fWidth;
61        int         fHeight;
62        ColorType   fColorType;
63        AlphaType   fAlphaType;
64    };
65
66    static SkImage* NewRasterCopy(const Info&, const void* pixels, size_t rowBytes);
67    static SkImage* NewRasterData(const Info&, SkData* pixels, size_t rowBytes);
68    static SkImage* NewEncodedData(SkData*);
69    static SkImage* NewTexture(GrTexture*);
70
71    int width() const { return fWidth; }
72    int height() const { return fHeight; }
73    uint32_t uniqueID() const { return fUniqueID; }
74
75    SkShader*   newShaderClamp() const;
76    SkShader*   newShader(SkShader::TileMode, SkShader::TileMode) const;
77
78    void draw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*);
79
80protected:
81    SkImage(int width, int height) :
82        fWidth(width),
83        fHeight(height),
84        fUniqueID(NextUniqueID()) {
85
86        SkASSERT(width >= 0);
87        SkASSERT(height >= 0);
88    }
89
90private:
91    const int       fWidth;
92    const int       fHeight;
93    const uint32_t  fUniqueID;
94
95    static uint32_t NextUniqueID();
96
97    typedef SkRefCnt INHERITED;
98};
99
100#endif
101