android createbitmap设置背景色,Android – Bitmap.createScaledBitmap()设置配置为ARGB_8888...

这是我第一次有一个问题,尽管经过彻底的搜索,似乎还没有被问到.

我遇到了Bitmap.createScaledBitmap()的问题,无论输入的配置如何,生成的缩放位图始终是ARGB_8888.当然,使用有限的内存时这是一个问题.

InputStream is;

try {

is = mAssets.open("test.png");

BitmapFactory.Options opts = new BitmapFactory.Options();

opts.inPreferredConfig = Config.ARGB_4444;

Bitmap originalBitmap = BitmapFactory.decodeStream(is, null, opts);

System.out.println("Original Config: " + originalBitmap.getConfig());

mScale = (float) mHeight / originalBitmap.getHeight();

mBitmapScaled = Bitmap.createScaledBitmap(originalBitmap, (int)(mScale*(float)originalBitmap.getWidth()),

(int)(mScale*(float)originalBitmap.getHeight()), true);

System.out.println("Scaled: " + mBitmapScaled.getConfig());

originalBitmap.recycle();

is.close();

} catch (IOException e) {

// Do something.

}

上面的代码返回输出:

Original Bitmap: ARGB_4444

Scaled: ARGB_8888

由于Bitmap.createScaledBitmap()方法不采用Config,因此似乎没有办法阻止这种情况.有任何想法吗?

解决方法:

createScaledBitmap(…)创建一个新的缩放位图,因此将提供的参数传递给createBitmap(…)方法.以下是createBitmap(…)源代码中的snippet:

if (config != null) {

switch (config) {

case RGB_565:

newConfig = Config.RGB_565;

break;

case ALPHA_8:

newConfig = Config.ALPHA_8;

break;

//noinspection deprecation

case ARGB_4444:

case ARGB_8888:

default:

newConfig = Config.ARGB_8888;

break;

}

}

如您所见,具有ARGB_4444配置的每个位图都会转换为ARGB_8888位图.所以回答你的问题:不,没有办法阻止这种情况(除非你想复制部分Bitmap.java源代码并创建自己的缩放方法).

为什么ARGB_4444配置的位图会转换为ARGB_8888?

ARGB_4444:

This field is deprecated. Because of the poor quality of this

configuration, it is advised to use ARGB_8888 instead.

标签:android,bitmap,scaling,config

来源: https://codeday.me/bug/20190625/1283746.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值