aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/images/SkImageEncoderFns.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/images/SkImageEncoderFns.h')
-rw-r--r--src/images/SkImageEncoderFns.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/images/SkImageEncoderFns.h b/src/images/SkImageEncoderFns.h
index 6a917d0db6..6012a45697 100644
--- a/src/images/SkImageEncoderFns.h
+++ b/src/images/SkImageEncoderFns.h
@@ -15,6 +15,7 @@
#include "SkBitmap.h"
#include "SkColor.h"
#include "SkColorPriv.h"
+#include "SkColorSpace_Base.h"
#include "SkICC.h"
#include "SkOpts.h"
#include "SkPreConfig.h"
@@ -256,6 +257,7 @@ static inline void transform_scanline_F16(char* SK_RESTRICT dst, const char* SK_
int width, int, const SkPMColor*) {
SkRasterPipeline_<256> p;
p.append(SkRasterPipeline::load_f16, (const void**) &src);
+ p.append(SkRasterPipeline::to_srgb);
p.append(SkRasterPipeline::store_u16_be, (void**) &dst);
p.run(0,0, width);
}
@@ -268,6 +270,7 @@ static inline void transform_scanline_F16_premul(char* SK_RESTRICT dst, const ch
SkRasterPipeline_<256> p;
p.append(SkRasterPipeline::load_f16, (const void**) &src);
p.append(SkRasterPipeline::unpremul);
+ p.append(SkRasterPipeline::to_srgb);
p.append(SkRasterPipeline::store_u16_be, (void**) &dst);
p.run(0,0, width);
}
@@ -312,10 +315,21 @@ static inline void transform_scanline_F16_to_premul_8888(char* SK_RESTRICT dst,
p.run(0,0, width);
}
-static inline sk_sp<SkData> icc_from_color_space(const SkColorSpace& cs) {
+static inline sk_sp<SkData> icc_from_color_space(const SkImageInfo& info) {
+ SkColorSpace* cs = info.colorSpace();
+ if (!cs) {
+ return nullptr;
+ }
+
+ sk_sp<SkColorSpace> owned;
+ if (kRGBA_F16_SkColorType == info.colorType()) {
+ owned = as_CSB(cs)->makeSRGBGamma();
+ cs = owned.get();
+ }
+
SkColorSpaceTransferFn fn;
SkMatrix44 toXYZD50(SkMatrix44::kUninitialized_Constructor);
- if (cs.isNumericalTransferFn(&fn) && cs.toXYZD50(&toXYZD50)) {
+ if (cs->isNumericalTransferFn(&fn) && cs->toXYZD50(&toXYZD50)) {
return SkICC::WriteToICC(fn, toXYZD50);
}