| Index: src/images/transform_scanline.h
|
| diff --git a/src/images/transform_scanline.h b/src/images/transform_scanline.h
|
| index 4baf6b6c6be25cecbf150ef31509afd45203ae1a..ab970aed4cb1b1ee81ee62b9b34bd5c5f14a1cc0 100644
|
| --- a/src/images/transform_scanline.h
|
| +++ b/src/images/transform_scanline.h
|
| @@ -48,17 +48,32 @@ static void transform_scanline_565(const char* SK_RESTRICT src, int width,
|
| }
|
|
|
| /**
|
| - * Transform from kARGB_8888_Config to 3-bytes-per-pixel RGB.
|
| - * Alpha channel data, if any, is abandoned.
|
| + * Transform from kRGBA_8888_SkColorType to 3-bytes-per-pixel RGB.
|
| + * Alpha channel data is abandoned.
|
| */
|
| -static void transform_scanline_888(const char* SK_RESTRICT src, int width,
|
| - char* SK_RESTRICT dst) {
|
| +static void transform_scanline_RGB1(const char* SK_RESTRICT src, int width,
|
| + char* SK_RESTRICT dst) {
|
| + const SkPMColor* SK_RESTRICT srcP = (const SkPMColor*)src;
|
| + for (int i = 0; i < width; i++) {
|
| + SkPMColor c = *srcP++;
|
| + *dst++ = (c >> 0) & 0xFF;
|
| + *dst++ = (c >> 8) & 0xFF;
|
| + *dst++ = (c >> 16) & 0xFF;
|
| + }
|
| +}
|
| +
|
| +/**
|
| + * Transform from kBGRA_8888_SkColorType to 3-bytes-per-pixel RGB.
|
| + * Alpha channel data is abandoned.
|
| + */
|
| +static void transform_scanline_BGR1(const char* SK_RESTRICT src, int width,
|
| + char* SK_RESTRICT dst) {
|
| const SkPMColor* SK_RESTRICT srcP = (const SkPMColor*)src;
|
| for (int i = 0; i < width; i++) {
|
| SkPMColor c = *srcP++;
|
| - *dst++ = SkGetPackedR32(c);
|
| - *dst++ = SkGetPackedG32(c);
|
| - *dst++ = SkGetPackedB32(c);
|
| + *dst++ = (c >> 16) & 0xFF;
|
| + *dst++ = (c >> 8) & 0xFF;
|
| + *dst++ = (c >> 0) & 0xFF;
|
| }
|
| }
|
|
|
| @@ -78,11 +93,9 @@ static void transform_scanline_444(const char* SK_RESTRICT src, int width,
|
| }
|
|
|
| /**
|
| - * Transform from kARGB_8888_Config to 4-bytes-per-pixel RGBA.
|
| - * (This would be the identity transformation, except for byte-order and
|
| - * scaling of RGB based on alpha channel).
|
| + * Transform from kPremul, kRGBA_8888_SkColorType to 4-bytes-per-pixel unpremultiplied RGBA.
|
| */
|
| -static void transform_scanline_8888(const char* SK_RESTRICT src, int width,
|
| +static void transform_scanline_rgbA(const char* SK_RESTRICT src, int width,
|
| char* SK_RESTRICT dst) {
|
| const SkPMColor* SK_RESTRICT srcP = (const SkPMColor*)src;
|
| const SkUnPreMultiply::Scale* SK_RESTRICT table =
|
| @@ -90,10 +103,10 @@ static void transform_scanline_8888(const char* SK_RESTRICT src, int width,
|
|
|
| for (int i = 0; i < width; i++) {
|
| SkPMColor c = *srcP++;
|
| - unsigned a = SkGetPackedA32(c);
|
| - unsigned r = SkGetPackedR32(c);
|
| - unsigned g = SkGetPackedG32(c);
|
| - unsigned b = SkGetPackedB32(c);
|
| + unsigned r = (c >> 0) & 0xFF;
|
| + unsigned g = (c >> 8) & 0xFF;
|
| + unsigned b = (c >> 16) & 0xFF;
|
| + unsigned a = (c >> 24) & 0xFF;
|
|
|
| if (0 != a && 255 != a) {
|
| SkUnPreMultiply::Scale scale = table[a];
|
| @@ -109,6 +122,56 @@ static void transform_scanline_8888(const char* SK_RESTRICT src, int width,
|
| }
|
|
|
| /**
|
| + * Transform from kPremul, kBGRA_8888_SkColorType to 4-bytes-per-pixel unpremultiplied RGBA.
|
| + */
|
| +static void transform_scanline_bgrA(const char* SK_RESTRICT src, int width,
|
| + char* SK_RESTRICT dst) {
|
| + const SkPMColor* SK_RESTRICT srcP = (const SkPMColor*)src;
|
| + const SkUnPreMultiply::Scale* SK_RESTRICT table =
|
| + SkUnPreMultiply::GetScaleTable();
|
| +
|
| + for (int i = 0; i < width; i++) {
|
| + SkPMColor c = *srcP++;
|
| + unsigned r = (c >> 16) & 0xFF;
|
| + unsigned g = (c >> 8) & 0xFF;
|
| + unsigned b = (c >> 0) & 0xFF;
|
| + unsigned a = (c >> 24) & 0xFF;
|
| +
|
| + if (0 != a && 255 != a) {
|
| + SkUnPreMultiply::Scale scale = table[a];
|
| + r = SkUnPreMultiply::ApplyScale(scale, r);
|
| + g = SkUnPreMultiply::ApplyScale(scale, g);
|
| + b = SkUnPreMultiply::ApplyScale(scale, b);
|
| + }
|
| + *dst++ = r;
|
| + *dst++ = g;
|
| + *dst++ = b;
|
| + *dst++ = a;
|
| + }
|
| +}
|
| +
|
| +/**
|
| + * Transform from kUnpremul, kRGBA_8888_SkColorType to 4-bytes-per-pixel unpremultiplied RGBA.
|
| + */
|
| +static void transform_scanline_RGBA(const char* SK_RESTRICT src, int width, char* SK_RESTRICT dst) {
|
| + memcpy(dst, src, sizeof(SkPMColor) * width);
|
| +}
|
| +
|
| +/**
|
| + * Transform from kUnpremul, kBGRA_8888_SkColorType to 4-bytes-per-pixel unpremultiplied RGBA.
|
| + */
|
| +static void transform_scanline_BGRA(const char* SK_RESTRICT src, int width, char* SK_RESTRICT dst) {
|
| + const SkPMColor* SK_RESTRICT srcP = (const SkPMColor*)src;
|
| + for (int i = 0; i < width; i++) {
|
| + SkPMColor c = *srcP++;
|
| + *dst++ = (c >> 0) & 0xFF;
|
| + *dst++ = (c >> 8) & 0xFF;
|
| + *dst++ = (c >> 16) & 0xFF;
|
| + *dst++ = (c >> 24) & 0xFF;
|
| + }
|
| +}
|
| +
|
| +/**
|
| * Transform from kARGB_8888_Config to 4-bytes-per-pixel RGBA,
|
| * with scaling of RGB based on alpha channel.
|
| */
|
|
|