BitmapFactory.decodeResource()忽略jpg图像的inPreferredConfig选项

时间:2012-05-02 12:21:24

标签: android colors bitmap jpeg decode

我尝试将jpeg资源图像加载到ARGB_8888格式的位图:

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap b = BitmapFactory.decodeResource(resources, resId, opts);
Log.d("test", b.getConfig().toString());

此处 resId 是jpeg图像资源的id。 输出为“ RGB_565 ”。 在Android 2.2和2.3的模拟器中试过这个。

'inPreferredConfig'的文档说:

  

如果这是非null,解码器将尝试解码到此内部   组态。如果它为null,或者无法满足请求,则   解码器将尝试选择最佳匹配配置   系统的屏幕深度,以及原始图像的特征等   好像它有每像素alpha(需要配置也可以)。   默认情况下,图像加载了ARGB_8888配置。

所以我遇到了“请求无法满足”的情况? :) 但老实说,我无法看到将RGB_565解码为ARGB_8888非常困难。

所以我想也许我做错了或者这是Android中的一个错误......

2 个答案:

答案 0 :(得分:1)

在查看源代码后,我只能说明遵循定义的inPreferredConfig的决定是在本机代码中完成的。参考:source

我会假设因为jpg不能拥有正在解码它的alpha通道RGB_565,因为它是非alpha图像的最有效配置。如果你真的希望它被解码为ARGB_8888将图像转换为png。

答案 1 :(得分:1)

加载jpeg时,必须将alpha通道设置为true:

bitmap.setHasAlpha(true);