• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  
2  /*
3   * Copyright 2011 Google Inc.
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  #include "SampleCode.h"
9  #include "SkView.h"
10  #include "SkCanvas.h"
11  #include "SkImageDecoder.h"
12  #include "SkStream.h"
13  
14  static const struct {
15      SkBitmap::Config    fPrefConfig;
16      bool                fDither;
17  } gRec[] = {
18      { SkBitmap::kIndex8_Config,     false },
19      { SkBitmap::kARGB_8888_Config,  false },
20      { SkBitmap::kARGB_4444_Config,  false },
21      { SkBitmap::kARGB_4444_Config,  true },
22      { SkBitmap::kRGB_565_Config,    false },
23      { SkBitmap::kRGB_565_Config,    true },
24  };
25  
26  class DecodeView : public SkView {
27  public:
28      SkBitmap fBitmap[SK_ARRAY_COUNT(gRec)];
29  
DecodeView()30  	DecodeView() {
31          SkFILEStream stream("/skimages/index.png");
32          SkImageDecoder* codec = SkImageDecoder::Factory(&stream);
33          if (codec) {
34              for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); i++) {
35                  stream.rewind();
36                  codec->setDitherImage(gRec[i].fDither);
37                  codec->decode(&stream, &fBitmap[i], gRec[i].fPrefConfig,
38                                SkImageDecoder::kDecodePixels_Mode);
39              }
40          }
41      }
42  
43  protected:
44      // overrides from SkEventSink
onQuery(SkEvent * evt)45      virtual bool onQuery(SkEvent* evt) {
46          if (SampleCode::TitleQ(*evt)) {
47              SampleCode::TitleR(evt, "ImageDecoder");
48              return true;
49          }
50          return this->INHERITED::onQuery(evt);
51      }
52  
drawBG(SkCanvas * canvas)53      void drawBG(SkCanvas* canvas) {
54          canvas->drawColor(0xFFDDDDDD);
55  //        canvas->drawColor(SK_ColorWHITE);
56      }
57  
onDraw(SkCanvas * canvas)58      virtual void onDraw(SkCanvas* canvas) {
59          this->drawBG(canvas);
60  
61          canvas->translate(SkIntToScalar(10), SkIntToScalar(20));
62  
63          for (size_t i = 0; i < SK_ARRAY_COUNT(fBitmap); i++) {
64              canvas->drawBitmap(fBitmap[i], 0, 0);
65              canvas->translate(SkIntToScalar(fBitmap[i].width()), 0);
66          }
67      }
68  private:
69      typedef SkView INHERITED;
70  };
71  
72  //////////////////////////////////////////////////////////////////////////////
73  
MyFactory()74  static SkView* MyFactory() { return new DecodeView; }
75  static SkViewRegister reg(MyFactory);
76  
77