4

我尝试将 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”的文档说:

如果这是非空的,解码器将尝试解码到这个内部配置。如果它为空,或者无法满足请求,解码器将尝试根据系统的屏幕深度和原始图像的特征(例如它是否具有每像素 alpha)来选择最佳匹配配置(需要一个配置也做)。默认情况下,图像使用 ARGB_8888 配置加载。

那么我是否遇到了“无法满足请求”的情况?:) 但老实说,我看不出将 RGB_565 解码为 ARGB_8888 是多么困难。

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

4

2 回答 2

1

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

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

于 2012-05-02T15:11:09.920 回答
1

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

bitmap.setHasAlpha(true);
于 2014-08-13T09:42:07.620 回答