gpt4 book ai didi

Android - Bitmap.createScaledBitmap() 将 Config 设置为 ARGB_8888

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:31 32 4
gpt4 key购买 nike

这是我第一次遇到一个问题,尽管进行了彻底的搜索,但似乎还没有人问过。

我在使用 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() 方法不采用配置,因此似乎没有办法防止这种情况发生。有什么想法吗?

最佳答案

createScaledBitmap(...) 创建一个新的缩放位图,因此将您提供的参数传递给 createBitmap(...) 方法。

下面是一个snippet来自 createBitmap(...) 的源代码:

    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

documentation是这样表述的:

ARGB_4444:

This field is deprecated. Because of the poor quality of this configuration, it is advised to use ARGB_8888 instead.

关于Android - Bitmap.createScaledBitmap() 将 Config 设置为 ARGB_8888,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17219120/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com