【问题标题】:Compressing bitmap returns always the same byte size压缩位图总是返回相同的字节大小
【发布时间】:2017-05-24 22:27:19
【问题描述】:

我正在尝试使用 JPG 压缩功能压缩位图。

这是我的一段代码:

 ByteArrayOutputStream out = new ByteArrayOutputStream();
 originalBitmap.compress(Bitmap.CompressFormat.JPEG, 80, out);
 byte[] newArray = out.toByteArray();
 Bitmap compressed = BitmapFactory.decodeByteArray(newArray, 0, newArray.length);

奇怪的行为是,如果我改变压缩因子(即从 80 到 50),“out”数组的大小会改变....但是“压缩”位图始终保持与相同的字节数“原始位图”。

谁能给我解释一下为什么?!?

提前谢谢...

【问题讨论】:

    标签: android bitmapimage image-compression


    【解决方案1】:

    Bitmap 占用的字节数为:X * Y * D,其中:

    • X 是宽度,以像素为单位
    • Y 是高度,以像素为单位
    • D 是位深度,以每像素字节数为单位,默认为 4

    Bitmap 是从 JPEG、PNG、WebP 还是其他任何文件加载都无关紧要。字节数仅由分辨率(宽度乘以高度)和位深度决定。

    因此,在您的情况下,您成功创建了一个字节数与以前相同的Bitmap,只是输出有点模糊。

    【讨论】:

    • 好的。我明白你的意思了!你能给我推荐一个压缩位图的好方法吗?
    • @Blasco73:我不知道您所说的“压缩位图”是什么意思。如果您的意思是“创建占用更少内存的更小的位图”,请在您原来的 Bitmap 上使用 createScaledBitmap()
    • 我的意思是位图(不过是图像),宽度和高度固定,但压缩比可变!
    • @Blasco73:在我的回答中,这是不可能的。欢迎您以压缩格式(JPEG、PNG、WebP 等)将位图保存到 磁盘
    • 是的,我认为这是解决方案(不优雅):以压缩格式保存并重新加载。谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    相关资源
    最近更新 更多