/*
* Process the color table for the bmp input
*/
- bool SkBmpStandardCodec::createColorTable(SkAlphaType alphaType, int* numColors) {
+ bool SkBmpStandardCodec::createColorTable(SkAlphaType dstAlphaType, int* numColors) {
// Allocate memory for color table
uint32_t colorBytes = 0;
SkPMColor colorTable[256];
// Choose the proper packing function
SkPMColor (*packARGB) (uint32_t, uint32_t, uint32_t, uint32_t);
- switch (alphaType) {
- case kOpaque_SkAlphaType:
- case kUnpremul_SkAlphaType:
- packARGB = &SkPackARGB32NoCheck;
- break;
- case kPremul_SkAlphaType:
- packARGB = &SkPreMultiplyARGB;
- break;
- default:
- // This should not be reached because conversion possible
- // should fail if the alpha type is not one of the above
- // values.
- SkASSERT(false);
- packARGB = nullptr;
- break;
+ SkAlphaType encodedAlphaType = this->getInfo().alphaType();
+ if (kOpaque_SkAlphaType == encodedAlphaType || kUnpremul_SkAlphaType == dstAlphaType) {
+ packARGB = &SkPackARGB32NoCheck;
+ } else {
+ packARGB = &SkPremultiplyARGBInline;
}
// Fill in the color table
uint8_t green = get_byte(cBuffer.get(), i*fBytesPerColor + 1);
uint8_t red = get_byte(cBuffer.get(), i*fBytesPerColor + 2);
uint8_t alpha;
- if (kOpaque_SkAlphaType == alphaType) {
+ if (kOpaque_SkAlphaType == encodedAlphaType) {
alpha = 0xFF;
} else {
alpha = get_byte(cBuffer.get(), i*fBytesPerColor + 3);
case 16:
switch (dstInfo.colorType()) {
case kN32_SkColorType:
- switch (dstInfo.alphaType()) {
- case kUnpremul_SkAlphaType:
- proc = &swizzle_mask16_to_n32_unpremul;
- break;
- case kPremul_SkAlphaType:
- proc = &swizzle_mask16_to_n32_premul;
- break;
- case kOpaque_SkAlphaType:
- proc = &swizzle_mask16_to_n32_opaque;
- break;
- default:
- break;
+ if (kOpaque_SkAlphaType == srcInfo.alphaType()) {
+ proc = &swizzle_mask16_to_n32_opaque;
+ } else {
+ switch (dstInfo.alphaType()) {
+ case kUnpremul_SkAlphaType:
+ proc = &swizzle_mask16_to_n32_unpremul;
+ break;
+ case kPremul_SkAlphaType:
+ proc = &swizzle_mask16_to_n32_premul;
+ break;
+ default:
+ break;
+ }
}
break;
case kRGB_565_SkColorType:
case 24:
switch (dstInfo.colorType()) {
case kN32_SkColorType:
- switch (dstInfo.alphaType()) {
- case kUnpremul_SkAlphaType:
- proc = &swizzle_mask24_to_n32_unpremul;
- break;
- case kPremul_SkAlphaType:
- proc = &swizzle_mask24_to_n32_premul;
- break;
- case kOpaque_SkAlphaType:
- proc = &swizzle_mask24_to_n32_opaque;
- break;
- default:
- break;
+ if (kOpaque_SkAlphaType == srcInfo.alphaType()) {
+ proc = &swizzle_mask24_to_n32_opaque;
+ } else {
+ switch (dstInfo.alphaType()) {
+ case kUnpremul_SkAlphaType:
+ proc = &swizzle_mask24_to_n32_unpremul;
+ break;
+ case kPremul_SkAlphaType:
+ proc = &swizzle_mask24_to_n32_premul;
+ break;
+ default:
+ break;
+ }
}
break;
case kRGB_565_SkColorType:
case 32:
switch (dstInfo.colorType()) {
case kN32_SkColorType:
- switch (dstInfo.alphaType()) {
- case kUnpremul_SkAlphaType:
- proc = &swizzle_mask32_to_n32_unpremul;
- break;
- case kPremul_SkAlphaType:
- proc = &swizzle_mask32_to_n32_premul;
- break;
- case kOpaque_SkAlphaType:
- proc = &swizzle_mask32_to_n32_opaque;
- break;
- default:
- break;
+ if (kOpaque_SkAlphaType == srcInfo.alphaType()) {
+ proc = &swizzle_mask32_to_n32_opaque;
+ } else {
+ switch (dstInfo.alphaType()) {
+ case kUnpremul_SkAlphaType:
+ proc = &swizzle_mask32_to_n32_unpremul;
+ break;
+ case kPremul_SkAlphaType:
+ proc = &swizzle_mask32_to_n32_premul;
+ break;
+ default:
+ break;
+ }
}
break;
case kRGB_565_SkColorType: