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