提高Java代码效率

时间:2015-01-18 23:46:42

标签: java android performance

以下代码运行~550ms,用户正在等待这种情况不断发生(除了来自外部库的一些额外处理)。有没有办法改进从int(像素)数组到最终Bitmap的转换?

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;

1 个答案:

答案 0 :(得分:5)

  

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

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

所以,用以下代码替换你的代码:

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

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

除了编码和解码JPEG所浪费的CPU时间之外,您现有的代码浪费了大量的堆空间。当Bitmap从其初始大小缓慢扩展到最终大小时,最终会有两个完整的ByteArrayOutputStream个实例和多个堆分配。