summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcore/jni/android/graphics/Bitmap.cpp31
-rw-r--r--graphics/java/android/graphics/Bitmap.java2
2 files changed, 20 insertions, 13 deletions
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index 2766689c23c4..e4493b1f489a 100755
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -924,7 +924,13 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) {
const bool isMutable = p->readInt32() != 0;
const SkColorType colorType = (SkColorType)p->readInt32();
const SkAlphaType alphaType = (SkAlphaType)p->readInt32();
- const bool isSRGB = p->readInt32() != 0;
+ const uint32_t colorSpaceSize = p->readUint32();
+ sk_sp<SkColorSpace> colorSpace;
+ if (kRGBA_F16_SkColorType == colorType) {
+ colorSpace = SkColorSpace::MakeSRGBLinear();
+ } else if (colorSpaceSize > 0) {
+ colorSpace = SkColorSpace::Deserialize(p->readInplace(colorSpaceSize), colorSpaceSize);
+ }
const int width = p->readInt32();
const int height = p->readInt32();
const int rowBytes = p->readInt32();
@@ -941,14 +947,6 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) {
}
std::unique_ptr<SkBitmap> bitmap(new SkBitmap);
-
- sk_sp<SkColorSpace> colorSpace;
- if (kRGBA_F16_SkColorType == colorType) {
- colorSpace = SkColorSpace::MakeSRGBLinear();
- } else {
- colorSpace = isSRGB ? SkColorSpace::MakeSRGB() : nullptr;
- }
-
if (!bitmap->setInfo(SkImageInfo::Make(width, height, colorType, alphaType, colorSpace),
rowBytes)) {
return NULL;
@@ -1065,13 +1063,20 @@ static jboolean Bitmap_writeToParcel(JNIEnv* env, jobject,
auto bitmapWrapper = reinterpret_cast<BitmapWrapper*>(bitmapHandle);
bitmapWrapper->getSkBitmap(&bitmap);
- sk_sp<SkColorSpace> sRGB = SkColorSpace::MakeSRGB();
- bool isSRGB = bitmap.colorSpace() == sRGB.get();
-
p->writeInt32(isMutable);
p->writeInt32(bitmap.colorType());
p->writeInt32(bitmap.alphaType());
- p->writeInt32(isSRGB); // TODO: We should write the color space (b/32072280)
+ SkColorSpace* colorSpace = bitmap.colorSpace();
+ if (colorSpace != nullptr && bitmap.colorType() != kRGBA_F16_SkColorType) {
+ sk_sp<SkData> data = colorSpace->serialize();
+ size_t size = data->size();
+ p->writeUint32(size);
+ if (size > 0) {
+ p->write(data->data(), size);
+ }
+ } else {
+ p->writeUint32(0);
+ }
p->writeInt32(bitmap.width());
p->writeInt32(bitmap.height());
p->writeInt32(bitmap.rowBytes());
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index 9cd9d3d75749..6bb8a2cac430 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -147,6 +147,7 @@ public final class Bitmap implements Parcelable {
mWidth = width;
mHeight = height;
mRequestPremultiplied = requestPremultiplied;
+ mColorSpace = null;
}
/**
@@ -254,6 +255,7 @@ public final class Bitmap implements Parcelable {
nativeReconfigure(mNativePtr, width, height, config.nativeInt, mRequestPremultiplied);
mWidth = width;
mHeight = height;
+ mColorSpace = null;
}
/**