diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-04-22 20:24:33 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-04-22 20:24:33 +0000 |
commit | 60b5dce19984a5165f6b2f1d6d477f5e8a940761 (patch) | |
tree | b54e4d9df7b9b1e03307be9f5043b0be92df6a2f /gm/aaclip.cpp | |
parent | 945ec3a2bec668ca845071a65df8ec55e8f43819 (diff) |
expose CGImage -> SkBitmap
BUG=skia:
R=scroggo@google.com, halcanary@google.com
Author: reed@google.com
Review URL: https://codereview.chromium.org/243463005
git-svn-id: http://skia.googlecode.com/svn/trunk@14315 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm/aaclip.cpp')
-rw-r--r-- | gm/aaclip.cpp | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/gm/aaclip.cpp b/gm/aaclip.cpp index 4f61767223..6028d60730 100644 --- a/gm/aaclip.cpp +++ b/gm/aaclip.cpp @@ -108,3 +108,91 @@ private: }; DEF_GM( return SkNEW(AAClipGM); ) + +///////////////////////////////////////////////////////////////////////// + +#ifdef SK_BUILD_FOR_MAC + +static SkCanvas* make_canvas(const SkBitmap& bm) { + const SkImageInfo& info = bm.info(); + if (info.bytesPerPixel() == 4) { + return SkCanvas::NewRasterDirectN32(info.width(), info.height(), + (SkPMColor*)bm.getPixels(), + bm.rowBytes()); + } else { + return SkNEW_ARGS(SkCanvas, (bm)); + } +} + +#include "SkCGUtils.h" +static void test_image(SkCanvas* canvas, const SkImageInfo& info) { + SkBitmap bm; + bm.allocPixels(info); + + SkAutoTUnref<SkCanvas> newc(make_canvas(bm)); + if (info.isOpaque()) { + bm.eraseColor(SK_ColorGREEN); + } else { + bm.eraseColor(0); + } + + SkPaint paint; + paint.setAntiAlias(true); + paint.setColor(SK_ColorBLUE); + newc->drawCircle(50, 50, 49, paint); + canvas->drawBitmap(bm, 10, 10); + + CGImageRef image = SkCreateCGImageRefWithColorspace(bm, NULL); + + SkBitmap bm2; + SkCreateBitmapFromCGImage(&bm2, image); + CGImageRelease(image); + + canvas->drawBitmap(bm2, 10, 120); +} + +class CGImageGM : public skiagm::GM { +public: + CGImageGM() {} + +protected: + virtual SkString onShortName() SK_OVERRIDE { + return SkString("cgimage"); + } + + virtual SkISize onISize() SK_OVERRIDE { + return SkISize::Make(800, 250); + } + + virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { + const struct { + SkColorType fCT; + SkAlphaType fAT; + } rec[] = { + { kRGB_565_SkColorType, kOpaque_SkAlphaType }, + + { kRGBA_8888_SkColorType, kPremul_SkAlphaType }, + { kRGBA_8888_SkColorType, kUnpremul_SkAlphaType }, + { kRGBA_8888_SkColorType, kOpaque_SkAlphaType }, + + { kBGRA_8888_SkColorType, kPremul_SkAlphaType }, + { kBGRA_8888_SkColorType, kUnpremul_SkAlphaType }, + { kBGRA_8888_SkColorType, kOpaque_SkAlphaType }, + }; + + for (size_t i = 0; i < SK_ARRAY_COUNT(rec); ++i) { + SkImageInfo info = SkImageInfo::Make(100, 100, rec[i].fCT, rec[i].fAT); + test_image(canvas, info); + canvas->translate(info.width() + 10, 0); + } + } + + virtual uint32_t onGetFlags() const SK_OVERRIDE { return kSkipPipe_Flag; } + +private: + typedef skiagm::GM INHERITED; +}; + +DEF_GM( return SkNEW(CGImageGM); ) + +#endif |