From: Mike Reed Date: Wed, 21 Dec 2016 17:01:12 +0000 (-0500) Subject: helper to convert CGImage -> SkImage X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~55^2~1079 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=463c848f3b63b52e3834e405ff11fd1e653ed271;p=platform%2Fupstream%2FlibSkiaSharp.git helper to convert CGImage -> SkImage BUG=skia: Change-Id: I07e0b8fe510d34ab541de7572cb6775478527624 Reviewed-on: https://skia-review.googlesource.com/6386 Commit-Queue: Mike Reed Reviewed-by: Florin Malita --- diff --git a/gm/aaclip.cpp b/gm/aaclip.cpp index 683f5ff..e9d4476 100644 --- a/gm/aaclip.cpp +++ b/gm/aaclip.cpp @@ -199,9 +199,10 @@ static void test_image(SkCanvas* canvas, const SkImageInfo& info) { SkBitmap bm2; SkCreateBitmapFromCGImage(&bm2, image); - CGImageRelease(image); - canvas->drawBitmap(bm2, 10, 120); + canvas->drawImage(SkMakeImageFromCGImage(image), 10, 120 + bm2.height() + 10); + + CGImageRelease(image); } class CGImageGM : public skiagm::GM { @@ -243,10 +244,7 @@ protected: private: typedef skiagm::GM INHERITED; }; - -#if 0 // Disabled pending fix from reed@ -DEF_GM( return new CGImageGM; ) -#endif +//DEF_GM( return new CGImageGM; ) #endif /////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/include/utils/mac/SkCGUtils.h b/include/utils/mac/SkCGUtils.h index 29df8b8..592f2f6 100644 --- a/include/utils/mac/SkCGUtils.h +++ b/include/utils/mac/SkCGUtils.h @@ -10,6 +10,7 @@ #include "SkSize.h" #include "SkImageInfo.h" +#include "SkImage.h" #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) @@ -32,7 +33,9 @@ class SkStreamRewindable; * * On failure, return false, and leave bitmap unchanged. */ -SK_API bool SkCreateBitmapFromCGImage(SkBitmap* dst, CGImageRef src, SkISize* scaleToFit = NULL); +SK_API bool SkCreateBitmapFromCGImage(SkBitmap* dst, CGImageRef src); + +SK_API sk_sp SkMakeImageFromCGImage(CGImageRef); /** * Copy the pixels from src into the memory specified by info/rowBytes/dstPixels. On failure, diff --git a/src/utils/mac/SkCreateCGImageRef.cpp b/src/utils/mac/SkCreateCGImageRef.cpp index d9cdb86..1b7e12b 100644 --- a/src/utils/mac/SkCreateCGImageRef.cpp +++ b/src/utils/mac/SkCreateCGImageRef.cpp @@ -212,9 +212,9 @@ SK_API bool SkCopyPixelsFromCGImage(const SkImageInfo& info, size_t rowBytes, vo return true; } -bool SkCreateBitmapFromCGImage(SkBitmap* dst, CGImageRef image, SkISize* scaleToFit) { - const int width = scaleToFit ? scaleToFit->width() : SkToInt(CGImageGetWidth(image)); - const int height = scaleToFit ? scaleToFit->height() : SkToInt(CGImageGetHeight(image)); +bool SkCreateBitmapFromCGImage(SkBitmap* dst, CGImageRef image) { + const int width = SkToInt(CGImageGetWidth(image)); + const int height = SkToInt(CGImageGetHeight(image)); SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); SkBitmap tmp; @@ -245,4 +245,14 @@ bool SkCreateBitmapFromCGImage(SkBitmap* dst, CGImageRef image, SkISize* scaleTo return true; } +sk_sp SkMakeImageFromCGImage(CGImageRef src) { + SkBitmap bm; + if (!SkCreateBitmapFromCGImage(&bm, src)) { + return nullptr; + } + + bm.setImmutable(); + return SkImage::MakeFromBitmap(bm); +} + #endif//defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) diff --git a/tools/Resources.cpp b/tools/Resources.cpp index 0c6e4b4..aa81d34 100644 --- a/tools/Resources.cpp +++ b/tools/Resources.cpp @@ -57,6 +57,19 @@ SkStreamAsset* GetResourceAsStream(const char* resource) { return stream.release(); } +sk_sp GetResourceAsData(const char* resource) { + SkString resourcePath = GetResourcePath(resource); + std::unique_ptr stream(new SkFILEStream(resourcePath.c_str())); + if (!stream->isValid()) { + SkDebugf("Resource %s not found.\n", resource); + return nullptr; + } + size_t bytes = stream->getLength(); + sk_sp data = SkData::MakeUninitialized(bytes); + stream->read(data->writable_data(), bytes); + return data; +} + sk_sp MakeResourceAsTypeface(const char* resource) { std::unique_ptr stream(GetResourceAsStream(resource)); if (!stream) { diff --git a/tools/Resources.h b/tools/Resources.h index 8115fbb..fa1ca45 100644 --- a/tools/Resources.h +++ b/tools/Resources.h @@ -12,6 +12,7 @@ #include "SkString.h" class SkBitmap; +class SkData; class SkImage; class SkStreamAsset; class SkTypeface; @@ -22,6 +23,7 @@ void SetResourcePath(const char* ); bool GetResourceAsBitmap(const char* resource, SkBitmap* dst); sk_sp GetResourceAsImage(const char* resource); SkStreamAsset* GetResourceAsStream(const char* resource); +sk_sp GetResourceAsData(const char* resource); sk_sp MakeResourceAsTypeface(const char* resource); #endif // Resources_DEFINED