aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode/SampleDecode.cpp
diff options
context:
space:
mode:
authorGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2009-07-08 20:09:23 +0000
committerGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2009-07-08 20:09:23 +0000
commit1134426f6b1c4130e8dbe4c38a4aa976fbb18b4b (patch)
treedf7c4a1592d7c9627571211e4c7be5265467b9c7 /samplecode/SampleDecode.cpp
parent40443b2371ecc61e04ad496f69919dc1e30036f5 (diff)
respect preferred config when png is index-based
git-svn-id: http://skia.googlecode.com/svn/trunk@261 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'samplecode/SampleDecode.cpp')
-rw-r--r--samplecode/SampleDecode.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/samplecode/SampleDecode.cpp b/samplecode/SampleDecode.cpp
new file mode 100644
index 0000000000..9a8026700c
--- /dev/null
+++ b/samplecode/SampleDecode.cpp
@@ -0,0 +1,67 @@
+#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);
+ 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);
+