- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是我第一次遇到一个问题,尽管进行了彻底的搜索,但似乎还没有人问过。
我在使用 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/
android.graphics.Bitmap.createScaledBitmap的声明是 public static Bitmap createScaledBitmap (Bitmap src
我完全理解“过早的优化是万恶之源。”但是,我已经到了这样的地步:我相信我想做的优化不再被认为是“过早的优化” ”。 我正在编写一个 Android 应用程序,除其他外,它还可以从 USB 设备流式传输
我正在使用以下代码: private Bitmap decodeFile(File f) { try { // decode image size Bitmap
我正在创建运行时 ImageView 并根据图像设置宽度和高度,它在 android marshmallows 下工作完美,但在 marshmallows 中不工作。 我正在检查我的图像不为空并且位图
尽管使用软引用并使用 inSample 大小作为选项,但我还是收到内存不足错误。我在调用 createScaledBitmap 时收到错误。非常感谢任何类型的指示。 最佳答案 如果您使用 Bitmap
所以我使用 Bitmap.createScaledBitmap 来缩放和显示我从我的 android 应用程序本地保存的 ImageView 文件。看起来它工作得很好,但现在似乎由于某种原因只能缩放某
指定缩放位图的宽度和高度时,该方法是要求像素还是密度无关像素? 我有一个 240dp 的设备,当将图像缩放到 240x240 时,图像几乎只有屏幕尺寸的一半。我期待它是全屏的。这是否意味着该方法使用像
我在使用 Bitmap.copy 函数时遇到问题。这段代码工作正常, Bitmap tempBM = Bitmap.createScaledBitmap(sourceBitmap, sourceBit
我想创建一个缩放位图,但我似乎得到了一个不成比例的图像。它看起来像一个正方形,而我想要长方形。 我的代码: Bitmap resizedBitmap = Bitmap.createScaledBitm
这是我第一次遇到一个问题,尽管进行了彻底的搜索,但似乎还没有人问过。 我在使用 Bitmap.createScaledBitmap() 时遇到问题,无论输入的配置如何,生成的缩放位图始终是 ARGB_
在我的应用程序中,我以这种方式加载 32 位 (ARGB_8888) 图像: Bitmap.Config mBitmapConfig; mBitmapConfig = Bitmap.Config.
我的应用的主要目的是按照图像所示的方式显示图像 private void setSelectedImage(int selectedImagePosition) { BitmapDrawabl
我是一名优秀的程序员,十分优秀!