以下代码需要大约550ms的时间运行,并且用户正在等待这种情况不断发生(除了来自外部库的一些额外处理)。有没有办法改善从整数(像素)到最终位图的转换?

int[] pixels   = imageDecoder.nativeGetImgBytes();  // a big tiff image

Bitmap b = Bitmap.createBitmap(pixels, w, h, Bitmap.Config.ARGB_8888);

ByteArrayOutputStream out = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.JPEG, 70, out);

byte[] byteArray = out.toByteArray();
b = BitmapFactory.decodeByteArray(byteArray, 0, array.length);

return b;

最佳答案

之后,我将使用像素int []数组并创建一个jpeg压缩的位图,该图最终将被获取,并由其他类显示在屏幕上。


不,你不是。 Bitmap未压缩。位图文件可以压缩,但Bitmap不能。

因此,将您的代码替换为:

int[] pixels   = imageDecoder.nativeGetImgBytes();  // a big tiff image

return Bitmap.createBitmap(pixels, w, h, Bitmap.Config.ARGB_8888);


除了浪费编码和解码JPEG的CPU时间之外,您现有的代码还浪费了很多堆空间。随着Bitmap从其初始大小逐渐扩展到最终大小,您将拥有两个完整的ByteArrayOutputStream实例和许多堆分配。

07-24 09:45
查看更多