Android 系统会根据图片格式和APP 指定的编码综合判断, 得出最终使用的编码. 可以参考源代码 (Android 8): SkAndroidCodec::computeOutputColorType(SkColorType requestedColorType):
{
124 switch (requestedColorType) {
125 case kARGB_4444_SkColorType:
126 return kN32_SkColorType;
127 case kN32_SkColorType:
128 // F16 is the Android default for high precision images.
129 return highPrecision ? kRGBA_F16_SkColorType : kN32_SkColorType;
130 case kIndex_8_SkColorType:
131 if (kIndex_8_SkColorType == suggestedColorType) {
132 return kIndex_8_SkColorType;
133 }
134 break;
135 case kAlpha_8_SkColorType:
136 // Fall through to kGray_8. Before kGray_8_SkColorType existed,
137 // we allowed clients to request kAlpha_8 when they wanted a
138 // grayscale decode.
144 case kRGB_565_SkColorType:
145 if (kOpaque_SkAlphaType == this->getInfo().alphaType()) {
146 return kRGB_565_SkColorType;
147 }
148 break;
153 }
161 // |suggestedColorType| may be kN32_SkColorType or kIndex_8_SkColorType.
162 return highPrecision ? kRGBA_F16_SkColorType : suggestedColorType;
}
可以看出, 4444被直接转为8888(API 官方文档里有描述). 如果图片中没有透明度信息, 565才不会被转为8888
Android bitmap config你理解对了吗?在写本文之前,我还以为自己对android的bitmap很熟悉,直到自己亲手写代码实践,才发现自己错了很多年。真是汗颜啊! Bitmap Config 首先,根据Androi...