/* * Copyright 2011 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "SampleCode.h" #include "SkView.h" #include "SkCanvas.h" #include "SkImageDecoder.h" #include "SkStream.h" static const struct { SkBitmap::Config fPrefConfig; bool fDither; } gRec[] = { { SkBitmap::kIndex8_Config, false }, { SkBitmap::kARGB_8888_Config, false }, { SkBitmap::kARGB_4444_Config, false }, { SkBitmap::kARGB_4444_Config, true }, { SkBitmap::kRGB_565_Config, false }, { SkBitmap::kRGB_565_Config, true }, }; class DecodeView : public SkView { public: SkBitmap fBitmap[SK_ARRAY_COUNT(gRec)]; DecodeView() { SkFILEStream stream("/skimages/index.png"); SkImageDecoder* codec = SkImageDecoder::Factory(&stream); if (codec) { for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); i++) { stream.rewind(); codec->setDitherImage(gRec[i].fDither); codec->decode(&stream, &fBitmap[i], gRec[i].fPrefConfig, SkImageDecoder::kDecodePixels_Mode); } } } protected: // overrides from SkEventSink virtual bool onQuery(SkEvent* evt) { if (SampleCode::TitleQ(*evt)) { SampleCode::TitleR(evt, "ImageDecoder"); return true; } return this->INHERITED::onQuery(evt); } void drawBG(SkCanvas* canvas) { canvas->drawColor(0xFFDDDDDD); // canvas->drawColor(SK_ColorWHITE); } virtual void onDraw(SkCanvas* canvas) { this->drawBG(canvas); canvas->translate(SkIntToScalar(10), SkIntToScalar(20)); for (size_t i = 0; i < SK_ARRAY_COUNT(fBitmap); i++) { canvas->drawBitmap(fBitmap[i], 0, 0); canvas->translate(SkIntToScalar(fBitmap[i].width()), 0); } } private: typedef SkView INHERITED; }; ////////////////////////////////////////////////////////////////////////////// static SkView* MyFactory() { return new DecodeView; } static SkViewRegister reg(MyFactory);