Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Unified Diff: gm/colorspace.cpp

Issue 1707033002: parse icc profiles Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | resources/Lower_Left.jpg » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gm/colorspace.cpp
diff --git a/gm/colorspace.cpp b/gm/colorspace.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..cb75d21ffbeac67ee640ec4d9bd33ad1f758e974
--- /dev/null
+++ b/gm/colorspace.cpp
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2016 Intel Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "gm.h"
+#include "Resources.h"
+#include "SkImage.h"
+#include "SkData.h"
+#include "SkColorSpace.h"
+
+#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS)
+
+#ifdef SK_BUILD_FOR_MAC
+#include <ApplicationServices/ApplicationServices.h>
+#endif
+
+#ifdef SK_BUILD_FOR_IOS
+#include <CoreGraphics/CoreGraphics.h>
+#endif
+
+static void release_data(void* info, const void*, size_t len) {
+ SkData* data = (SkData*)info;
+ SkASSERT(data->size() == len);
+ data->unref();
+}
+
+static SkColorSpace* extract_cs(SkImage* img) {
+ SkData* data = img->refEncoded();
+ if (!data) {
+ return nullptr;
+ }
+
+ CGDataProviderRef provider = CGDataProviderCreateWithData(data, data->data(), data->size(),
+ release_data);
+ CGImageRef cgimg = CGImageCreateWithJPEGDataProvider(provider, nullptr, false,
+ kCGRenderingIntentDefault);
+ CFDataRef cfdata = CGColorSpaceCopyICCProfile(CGImageGetColorSpace(cgimg));
+
+ SkColorSpace* cs = SkColorSpace::NewICCProfile(CFDataGetBytePtr(cfdata),
+ CFDataGetLength(cfdata));
+
+ CFRelease(cfdata);
+ CGImageRelease(cgimg);
+ CGDataProviderRelease(provider);
+ return cs;
+}
+#else
+static SkColorSpace* extract_cs(SkImage* img) { return nullptr; }
+#endif
+
+// test images from http://www.color.org/version4html.xalter
+//
+DEF_SIMPLE_GM(colorspace, canvas, 570, 440) {
+ SkImage* image[] = {
+ GetResourceAsImage("Upper_Left.jpg"),
+ GetResourceAsImage("Upper_Right.jpg"),
+ GetResourceAsImage("Lower_Left.jpg"),
+ GetResourceAsImage("Lower_Right.jpg"),
+ };
+
+ canvas->translate(10, 10);
+
+ const SkScalar w = SkIntToScalar(image[0]->width());
+ const SkScalar h = SkIntToScalar(image[0]->height());
+
+ canvas->drawImage(image[0], 0, 0, nullptr);
+ canvas->drawImage(image[1], w, 0, nullptr);
+ canvas->drawImage(image[2], 0, h, nullptr);
+ canvas->drawImage(image[3], w, h, nullptr);
+
+ SkAutoTUnref<SkColorSpace> dev(SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named));
+
+ for (auto img : image) {
+ SkAutoTUnref<SkColorSpace> cs(extract_cs(img));
+ if (cs) {
+ enum Result {
+ kFailure_Result,
+ kIdentity_Result,
+ kNormal_Result,
+ };
+
+ SkFloat3x3 matrix;
+ SkColorSpace::Result res = SkColorSpace::Concat(cs, dev, &matrix);
+ SkDebugf("result[%d] ", res);
+ matrix.dump();
+ }
+ img->unref();
+ }
+}
« no previous file with comments | « no previous file | resources/Lower_Left.jpg » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698