aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/encode-srgb.cpp
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-01-19 17:14:07 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-01-19 23:07:13 +0000
commit1da27ef853ae3e701b7f4aae670c21684396dcce (patch)
tree56fb2fed264ab2f3d1d130eac8bce03f4fa430a9 /gm/encode-srgb.cpp
parent0d7d8de00a3ce2e70cf1221392db3d960610ad62 (diff)
Add F16 support to SkPNGImageEncoder
BUG=skia: CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD Change-Id: Ifd221365a7b9f9a4a4fc5382621e0da7189e1148 Reviewed-on: https://skia-review.googlesource.com/6526 Reviewed-by: Mike Klein <mtklein@chromium.org> Reviewed-by: Leon Scroggins <scroggo@google.com> Commit-Queue: Matt Sarett <msarett@google.com>
Diffstat (limited to 'gm/encode-srgb.cpp')
-rw-r--r--gm/encode-srgb.cpp29
1 files changed, 24 insertions, 5 deletions
diff --git a/gm/encode-srgb.cpp b/gm/encode-srgb.cpp
index b9fe65bf6a..d4bd782bf2 100644
--- a/gm/encode-srgb.cpp
+++ b/gm/encode-srgb.cpp
@@ -10,6 +10,7 @@
#include "Resources.h"
#include "SkCanvas.h"
#include "SkCodec.h"
+#include "SkColorSpace_Base.h"
#include "SkData.h"
#include "SkImageEncoderPriv.h"
#include "SkPM4f.h"
@@ -24,6 +25,18 @@ static inline int div_round_up(int a, int b) {
return (a + b - 1) / b;
}
+sk_sp<SkColorSpace> fix_for_colortype(sk_sp<SkColorSpace> colorSpace, SkColorType colorType) {
+ if (kRGBA_F16_SkColorType == colorType) {
+ if (!colorSpace) {
+ return SkColorSpace::MakeNamed(SkColorSpace::kSRGBLinear_Named);
+ }
+
+ return as_CSB(colorSpace)->makeLinearGamma();
+ }
+
+ return colorSpace;
+}
+
static void make_index8(SkBitmap* bitmap, SkAlphaType alphaType, sk_sp<SkColorSpace> colorSpace) {
const SkColor colors[] = {
0x800000FF, 0x8000FF00, 0x80FF0000, 0x80FFFF00,
@@ -73,11 +86,13 @@ static void make(SkBitmap* bitmap, SkColorType colorType, SkAlphaType alphaType,
return;
}
- sk_sp<SkData> data = GetResourceAsData("color_wheel.png");
+ const char* resource = (kOpaque_SkAlphaType == alphaType) ? "color_wheel.jpg"
+ : "color_wheel.png";
+ sk_sp<SkData> data = GetResourceAsData(resource);
std::unique_ptr<SkCodec> codec(SkCodec::NewFromData(data));
SkImageInfo dstInfo = codec->getInfo().makeColorType(colorType)
.makeAlphaType(alphaType)
- .makeColorSpace(colorSpace);
+ .makeColorSpace(fix_for_colortype(colorSpace, colorType));
bitmap->allocPixels(dstInfo);
codec->getPixels(dstInfo, bitmap->getPixels(), bitmap->rowBytes());
}
@@ -107,12 +122,16 @@ protected:
}
SkISize onISize() override {
- return SkISize::Make(imageWidth * 2, imageHeight * 4);
+ return SkISize::Make(imageWidth * 2, imageHeight * 9);
}
void onDraw(SkCanvas* canvas) override {
- const SkColorType colorTypes[] = { kN32_SkColorType, kIndex_8_SkColorType, };
- const SkAlphaType alphaTypes[] = { kUnpremul_SkAlphaType, kPremul_SkAlphaType, };
+ const SkColorType colorTypes[] = {
+ kN32_SkColorType, kRGBA_F16_SkColorType, kIndex_8_SkColorType,
+ };
+ const SkAlphaType alphaTypes[] = {
+ kUnpremul_SkAlphaType, kPremul_SkAlphaType, kOpaque_SkAlphaType,
+ };
const sk_sp<SkColorSpace> colorSpaces[] = {
nullptr, SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named),
};