Fix bitmap get/set pixels for ALPHA_8
bug:22724734
Change-Id: If8307854f6bad6fac9ee0b394bf0b044c61183e5
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index 0d80a7f..670d3c0 100755
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -475,6 +475,14 @@
}
}
+static void FromColor_DA8(void* dst, const SkColor src[], int width, int x, int y) {
+ uint8_t* d = (uint8_t*)dst;
+
+ for (int stop = x + width; x < stop; x++) {
+ *d++ = SkColorGetA(*src++);
+ }
+}
+
// can return NULL
static FromColorProc ChooseFromColorProc(const SkBitmap& bitmap) {
switch (bitmap.colorType()) {
@@ -485,6 +493,8 @@
FromColor_D4444_Raw;
case kRGB_565_SkColorType:
return FromColor_D565;
+ case kAlpha_8_SkColorType:
+ return FromColor_DA8;
default:
break;
}
@@ -632,6 +642,15 @@
} while (--width != 0);
}
+static void ToColor_SA8(SkColor dst[], const void* src, int width, SkColorTable*) {
+ SkASSERT(width > 0);
+ const uint8_t* s = (const uint8_t*)src;
+ do {
+ uint8_t c = *s++;
+ *dst++ = SkColorSetARGB(c, c, c, c);
+ } while (--width != 0);
+}
+
// can return NULL
static ToColorProc ChooseToColorProc(const SkBitmap& src) {
switch (src.colorType()) {
@@ -673,6 +692,8 @@
default:
return NULL;
}
+ case kAlpha_8_SkColorType:
+ return ToColor_SA8;
default:
break;
}