/* * Copyright 2018 Google 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 "SkColorSpace.h" #include "SkString.h" DEF_SIMPLE_GM(p3, canvas, 320, 240) { auto dp3 = SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, SkColorSpace::kDCIP3_D65_Gamut); // Draw a P3 red rectangle. SkPaint paint; paint.setColor4f({1,0,0,1}, dp3.get()); canvas->drawRect({10,10,70,70}, SkPaint{}); canvas->drawRect({10,10,70,70}, paint); // Read it back in the color space of the canvas, and in P3. auto info = SkImageInfo::Make(60,60, kRGBA_F32_SkColorType, kUnpremul_SkAlphaType); SkBitmap native_bm, p3_bm; native_bm.allocPixels(info.makeColorSpace(canvas->imageInfo().refColorSpace())); p3_bm .allocPixels(info.makeColorSpace(dp3)); if (canvas->readPixels(native_bm, 10,10) && canvas->readPixels( p3_bm, 10,10)) { canvas->drawString("drawRect()", 100,20, SkPaint{}); const float* rgb = (const float*)native_bm.getAddr(10,10); canvas->drawString("Native:", 80,40, SkPaint{}); canvas->drawString(SkStringPrintf("%.2g %.2g %.2g", rgb[0], rgb[1], rgb[2]).c_str(), 120,40, SkPaint{}); canvas->drawString("P3:", 80,60, SkPaint{}); rgb = (const float*)p3_bm.getAddr(10,10); canvas->drawString(SkStringPrintf("%.2g %.2g %.2g", rgb[0], rgb[1], rgb[2]).c_str(), 120,60, SkPaint{}); } else { canvas->drawString("can't readPixels() :(", 100,20, SkPaint{}); } // TODO: draw P3 colors more ways }