Max*_*der 5 scaling android config bitmap
这是我第一次遇到一个问题,尽管进行了彻底的搜索,但似乎还没有被问到。
我遇到一个问题,即无论输入的配置如何,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.
}
Run Code Online (Sandbox Code Playgroud)
上面的代码返回输出:
原始位图:ARGB_4444
缩放:ARGB_8888
由于该Bitmap.createScaledBitmap()方法不接受配置,因此似乎没有办法阻止这种情况。有任何想法吗?
createScaledBitmap(...)创建一个新的、缩放的位图,因此将您提供的参数传递给该createBitmap(...)方法。
以下是源码中的一个片段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;
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,具有配置的每个位图ARGB_4444都会转换为位图。ARGB_8888所以回答你的问题:不,没有办法阻止这种情况(除非你想复制 Bitmap.java 源代码的一部分并创建你自己的缩放方法)。
为什么具有ARGB_4444配置的位图会转换为ARGB_8888?
文档是这样描述的:
ARGB_4444:该字段已弃用。由于该配置质量较差,建议改用
ARGB_8888。
| 归档时间: |
|
| 查看次数: |
5460 次 |
| 最近记录: |