gpt4 book ai didi

android - 如何减小透明位图大小(不是尺寸)

转载 作者:太空狗 更新时间:2023-10-29 14:25:04 25 4
gpt4 key购买 nike

在我的 android 应用程序中,我正在处理 Canvas 位图(实际上它是来自 Samsung SPen SDK 的 SCanvas,但这并不重要),通常此类位图 90-95% 的区域是透明的,所以我希望有以 KB 为单位的位图大小不要太大。但似乎位图大小(以 KB 为单位)不取决于它是简单背景还是复杂图片,因此例如如果我有两张图片(抱歉,我是新用户,我不能发布任何图片):

1) 空框(1000x700 px,背景透明,彩色边框)

2)全帧(1000x700像素,背景透明,彩色边框,里面有很多文字)

两个位图的大小约为 1.3MB。

但是如果我将这些位图转换为字节数组,第一个数组的大小大约比第二个数组的大小小 11 倍。

我必须在数据库中存储很多像 BLOB 这样的图像,并将它们显示为 ImageView 位图。

问题1:如果我需要显示20个95%透明图片的ImageView对象,有没有办法不同时占用20 * 1.3MB?对我来说,它似乎应该只有 1 个 alpha 层 + 20 个“数据”层。

问题 2:有什么方法可以在不损失太多质量的情况下减小具有透明度的图像的大小(以 KB 为单位)?我看到的唯一方法是使用 inSampleSize = 2 解码图像字节数组,然后创建缩放位图以保持原始图像尺寸,例如:

originalBitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
byte[] bitmapBytes = stream.toByteArray();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(bitmapBytes, 0, bitmapBytes.length, options);
int bWidth = options.outWidth;
int bHeight = options.outHeight;
options.inSampleSize = 2;
options.inPreferredConfig = Bitmap.Config.ARGB_4444;
options.inJustDecodeBounds = false;
Bitmap scaledBitmap = BitmapFactory.decodeByteArray(bitmapBytes, 0, bitmapBytes.length, options);
Bitmap finalBitmap = Bitmap.createScaledBitmap(scaledBitmap, bWidth, bHeight, true);

但无论我使用什么选项(inPreferredConfig、inDither),finalBitmap 的质量都是 Not Acceptable 。

对于处理具有大约 90% 的简单透明背景和 10% 的单色“数据”的图像的最佳方式,您还有其他想法吗?

最佳答案

无论您使用什么格式,在显示之前它总是以原始未压缩(解码)数据结束,如果不解码,您就无法在显示器上看到它。如果您担心内存不足,请尽量不要一直解码所有图像,只解码您必须显示的图像,并始终释放其他图像(不要保留对它们的引用)。

关于android - 如何减小透明位图大小(不是尺寸),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13308153/

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