SkBitmap::getColor repsects swizzle

Review URL: https://codereview.chromium.org/1510253002
This commit is contained in:
halcanary 2015-12-09 10:21:59 -08:00 committed by Commit bot
parent 4a4f14ba3f
commit b260d130ca
2 changed files with 30 additions and 2 deletions

View File

@ -572,10 +572,15 @@ SkColor SkBitmap::getColor(int x, int y) const {
SkPMColor c = SkPixel4444ToPixel32(addr[0]);
return SkUnPreMultiply::PMColorToColor(c);
}
case kBGRA_8888_SkColorType:
case kBGRA_8888_SkColorType: {
uint32_t* addr = this->getAddr32(x, y);
SkPMColor c = SkSwizzle_BGRA_to_PMColor(addr[0]);
return SkUnPreMultiply::PMColorToColor(c);
}
case kRGBA_8888_SkColorType: {
uint32_t* addr = this->getAddr32(x, y);
return SkUnPreMultiply::PMColorToColor(addr[0]);
SkPMColor c = SkSwizzle_RGBA_to_PMColor(addr[0]);
return SkUnPreMultiply::PMColorToColor(c);
}
default:
SkASSERT(false);

View File

@ -122,3 +122,26 @@ DEF_TEST(Bitmap, reporter) {
test_bigalloc(reporter);
test_peekpixels(reporter);
}
/**
* This test checks that getColor works for both swizzles.
*/
DEF_TEST(Bitmap_getColor_Swizzle, r) {
SkBitmap source;
source.allocN32Pixels(1,1);
source.eraseColor(SK_ColorRED);
SkColorType colorTypes[] = {
kRGBA_8888_SkColorType,
kBGRA_8888_SkColorType,
};
for (SkColorType ct : colorTypes) {
SkBitmap copy;
if (!source.copyTo(&copy, ct)) {
ERRORF(r, "SkBitmap::copy failed %d", (int)ct);
continue;
}
SkAutoLockPixels autoLockPixels1(copy);
SkAutoLockPixels autoLockPixels2(source);
REPORTER_ASSERT(r, source.getColor(0, 0) == copy.getColor(0, 0));
}
}