我遇到了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?
documentation声明如下:
总结
ARGB_4444
:This fIEld is deprecated. Because of the poor quality of this
configuration,it is advised to useARGB_8888
instead.
以上是内存溢出为你收集整理的Android – Bitmap.createScaledBitmap()设置配置为ARGB_8888全部内容,希望文章能够帮你解决Android – Bitmap.createScaledBitmap()设置配置为ARGB_8888所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)