BitmapFactory将PNG字节解码为原始数据

时间:2018-10-19 17:44:21

标签: android compression png android-bitmap bitmapfactory

我正在通过网络下载图像数据,显然它已被压缩。在应用程序内部,我需要数据与原始数据100%准确。因此,例如对于720x720的图像,我需要一个518400长度的int数组或2073600长度的字节数组,其中的值尚未从原始值修改。由于PNG压缩是无损的,这应该是可能的。我注意到BitmapFactory在解码时会施加一些心理视觉效果,而在观看图像时这些效果并不明显,但是会稍微改变字节值(我假设这是为了提高速度和/或更好的屏幕视觉效果。

我当前正在使用BitmapFactory.decode,然后遍历每个像素以近似地创建一个新数组,并使用Bitmap.create创建一个新的位图。这是可能的,因为现在图像是二进制的,并且是原始的图像每个像素为(r,g,b,255)或(0,0,0,0)。我可以找到最流行的颜色,并将所有alpha值超过某个阈值的像素设置为该RGB值。但是,该解决方案的速度很慢,而且看起来不必要地复杂。

所以我的问题是-BitmapFactory.decode的选项标志是否有任何组合,这些标志返回原始Bitmap的100%为真,还是我必须自己创建一个PNG解码器才能实现?

1 个答案:

答案 0 :(得分:-1)

试试这个方法:

val opts = BitmapFactory.Options()
opts.inPremultiplied = false
var bitmapDecode = BitmapFactory.decodeByteArray(decode, 0, decode.size, opts)