Index: src/images/SkImageDecoder.cpp |
diff --git a/src/images/SkImageDecoder.cpp b/src/images/SkImageDecoder.cpp |
index 5d94bb1c2db97efd618320213210ef91ee363329..a0d3f52c61fcb1db9b306901482c33841b316e0c 100644 |
--- a/src/images/SkImageDecoder.cpp |
+++ b/src/images/SkImageDecoder.cpp |
@@ -145,31 +145,43 @@ void SkImageDecoder::setPrefConfigTable(const SkBitmap::Config pref[6]) { |
fUsePrefTable = false; |
} else { |
fUsePrefTable = true; |
- memcpy(fPrefTable, pref, sizeof(fPrefTable)); |
+ fPrefTable.f8Index_NoAlpha = pref[0]; |
+ fPrefTable.f8Index_YesAlpha = pref[1]; |
+ fPrefTable.f8Gray = SkBitmap::kNo_Config; |
+ fPrefTable.f16bit_NoAlpha = pref[2]; |
+ fPrefTable.f16bit_YesAlpha = pref[3]; |
+ fPrefTable.f32_24bit_NoAlpha = pref[4]; |
+ fPrefTable.f32_24bit_YesAlpha = pref[5]; |
} |
} |
+void SkImageDecoder::setPrefConfigTable(const PrefConfigTable& prefTable) { |
+ fUsePrefTable = true; |
+ fPrefTable = prefTable; |
+} |
+ |
SkBitmap::Config SkImageDecoder::getPrefConfig(SrcDepth srcDepth, |
bool srcHasAlpha) const { |
SkBitmap::Config config; |
if (fUsePrefTable) { |
- int index = 0; |
switch (srcDepth) { |
case kIndex_SrcDepth: |
- index = 0; |
+ config = srcHasAlpha ? fPrefTable.f8Index_YesAlpha |
+ : fPrefTable.f8Index_NoAlpha; |
+ break; |
+ case k8BitGray_SrcDepth: |
+ config = fPrefTable.f8Gray; |
break; |
case k16Bit_SrcDepth: |
- index = 2; |
+ config = srcHasAlpha ? fPrefTable.f16bit_YesAlpha |
+ : fPrefTable.f16bit_NoAlpha; |
break; |
case k32Bit_SrcDepth: |
- index = 4; |
+ config = srcHasAlpha ? fPrefTable.f32_24bit_YesAlpha |
+ : fPrefTable.f32_24bit_NoAlpha; |
break; |
} |
- if (srcHasAlpha) { |
- index += 1; |
- } |
- config = fPrefTable[index]; |
} else { |
config = fDefaultPref; |
} |