Home | History | Annotate | Download | only in core
      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 
     14 class SkData;
     15 class SkCanvas;
     16 class SkPaint;
     17 class SkShader;
     18 class GrContext;
     19 class 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  */
     36 class SkImage : public SkRefCnt {
     37 public:
     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 
     80 protected:
     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 
     90 private:
     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