summaryrefslogtreecommitdiff
path: root/libs/hwui/SkiaCanvas.cpp
diff options
context:
space:
mode:
author Romain Guy <romainguy@google.com> 2017-04-04 19:38:50 -0700
committer Romain Guy <romainguy@google.com> 2017-04-07 07:56:14 -0700
commit8242656f495847c50c9ceaea92839dce78218a75 (patch)
tree467b8d3ceb1c305c8ba13d5b6edbdfceed390fbf /libs/hwui/SkiaCanvas.cpp
parent7a7c0ace8277d06513ab9eaa19159d66919764ba (diff)
Color management, the missing pieces
Implement missing color management pieces for bitmaps: - Bitmap.createBitmap(Bitmap src, ...) now creates a bitmap in the same color space as the source bitmap - Bitmap.createScaledBitmap() now creates a bitmap in the same color space as the source bitmap - Bitmap.createBitmap(..., ColorSpace colorSpace) to create bitmaps in a specific color space - Fix copy from A8 to F16 - Copying bitmaps in F16 or with a color space does not work, it's currently a limitation in Skia Bug: 36905374 Test: BitmapColorSpaceTest Change-Id: I0092fe4432511db50daa3a9393389a9db05e0c2a
Diffstat (limited to 'libs/hwui/SkiaCanvas.cpp')
-rw-r--r--libs/hwui/SkiaCanvas.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp
index 13d7e09b6e79..9f649ead2b52 100644
--- a/libs/hwui/SkiaCanvas.cpp
+++ b/libs/hwui/SkiaCanvas.cpp
@@ -58,8 +58,10 @@ SkiaCanvas::SkiaCanvas(SkCanvas* canvas, XformToSRGB xformToSRGB)
}
SkiaCanvas::SkiaCanvas(const SkBitmap& bitmap) {
+ sk_sp<SkColorSpace> cs = bitmap.refColorSpace();
mCanvasOwned = std::unique_ptr<SkCanvas>(new SkCanvas(bitmap));
- mCanvasWrapper = SkCreateColorSpaceXformCanvas(mCanvasOwned.get(), SkColorSpace::MakeSRGB());
+ mCanvasWrapper = SkCreateColorSpaceXformCanvas(mCanvasOwned.get(),
+ cs == nullptr ? SkColorSpace::MakeSRGB() : std::move(cs));
mCanvas = mCanvasWrapper.get();
}
@@ -97,9 +99,10 @@ private:
};
void SkiaCanvas::setBitmap(const SkBitmap& bitmap) {
+ sk_sp<SkColorSpace> cs = bitmap.refColorSpace();
std::unique_ptr<SkCanvas> newCanvas = std::unique_ptr<SkCanvas>(new SkCanvas(bitmap));
- std::unique_ptr<SkCanvas> newCanvasWrapper =
- SkCreateColorSpaceXformCanvas(newCanvas.get(), SkColorSpace::MakeSRGB());
+ std::unique_ptr<SkCanvas> newCanvasWrapper = SkCreateColorSpaceXformCanvas(newCanvas.get(),
+ cs == nullptr ? SkColorSpace::MakeSRGB() : std::move(cs));
if (!bitmap.isNull()) {
// Copy the canvas matrix & clip state.