From: reed@android.com Date: Tue, 10 Nov 2009 15:54:55 +0000 (+0000) Subject: use imageref_globalpool in samplepicture, to test flattening bitmaps X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~19335 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c6ddc110c0f4bd16b5ce61cad6c6ac4213c026a0;p=platform%2Fupstream%2FlibSkiaSharp.git use imageref_globalpool in samplepicture, to test flattening bitmaps git-svn-id: http://skia.googlecode.com/svn/trunk@422 2bbb7eff-a529-9590-31e7-b0007b416f81 --- diff --git a/samplecode/SamplePicture.cpp b/samplecode/SamplePicture.cpp index 8ebb566..4ca5b2a 100644 --- a/samplecode/SamplePicture.cpp +++ b/samplecode/SamplePicture.cpp @@ -21,6 +21,21 @@ #include "SkStream.h" #include "SkXMLParser.h" +#include "SkImageRef_GlobalPool.h" + +static SkBitmap load_bitmap() { + SkStream* stream = new SkFILEStream("/skimages/sesame_street_ensemble-hp.jpg"); + SkAutoUnref aur(stream); + + SkBitmap bm; + if (SkImageDecoder::DecodeStream(stream, &bm, SkBitmap::kNo_Config, + SkImageDecoder::kDecodeBounds_Mode)) { + SkPixelRef* pr = new SkImageRef_GlobalPool(stream, bm.config(), 1); + bm.setPixelRef(pr)->unref(); + } + return bm; +} + static void drawCircle(SkCanvas* canvas, int r, SkColor color) { SkPaint paint; paint.setAntiAlias(true); @@ -31,13 +46,20 @@ static void drawCircle(SkCanvas* canvas, int r, SkColor color) { } class PictureView : public SkView { + SkBitmap fBitmap; public: PictureView() { + SkImageRef_GlobalPool::SetRAMBudget(16 * 1024); + + fBitmap = load_bitmap(); + fPicture = new SkPicture; SkCanvas* canvas = fPicture->beginRecording(100, 100); SkPaint paint; paint.setAntiAlias(true); + canvas->drawBitmap(fBitmap, 0, 0, NULL); + drawCircle(canvas, 50, SK_ColorBLACK); fSubPicture = new SkPicture; canvas->drawPicture(*fSubPicture); @@ -75,7 +97,12 @@ protected: void drawSomething(SkCanvas* canvas) { SkPaint paint; - + + canvas->save(); + canvas->scale(0.5f, 0.5f); + canvas->drawBitmap(fBitmap, 0, 0, NULL); + canvas->restore(); + paint.setAntiAlias(true); paint.setColor(SK_ColorRED); diff --git a/src/images/SkImageRef.cpp b/src/images/SkImageRef.cpp index 7ef5f40..60e01c6 100644 --- a/src/images/SkImageRef.cpp +++ b/src/images/SkImageRef.cpp @@ -6,6 +6,8 @@ #include "SkTemplates.h" #include "SkThread.h" +//#define DUMP_IMAGEREF_LIFECYCLE + // can't be static, as SkImageRef_Pool needs to see it SkMutex gImageRefMutex; @@ -160,6 +162,8 @@ SkImageRef::SkImageRef(SkFlattenableReadBuffer& buffer) : INHERITED(buffer, &gImageRefMutex), fErrorInDecoding(false) { fConfig = (SkBitmap::Config)buffer.readU8(); fSampleSize = buffer.readU8(); + fDoDither = buffer.readBool(); + size_t length = buffer.readU32(); fStream = SkNEW_ARGS(SkMemoryStream, (length)); buffer.read((void*)fStream->getMemoryBase(), length); @@ -173,6 +177,7 @@ void SkImageRef::flatten(SkFlattenableWriteBuffer& buffer) const { buffer.write8(fConfig); buffer.write8(fSampleSize); + buffer.writeBool(fDoDither); size_t length = fStream->getLength(); buffer.write32(length); fStream->rewind();