更快的图像处理

时间:2012-11-23 16:32:52

标签: android

有人可以建议我一个可以做最简单操作的库,比如缩放,裁剪,旋转而不将图像完全加载到内存中吗?

情况:我需要从非常大的尺寸缩小图像,但缩小的图像仍然太大而无法在内存中分配(如果我们使用标准的android工具)。由于我只需要上传缩小版本,我想通过本机库扩展它并通过FileInputStream上传。

我尝试过使用ImageMagic并且它完成了这项工作,但性能非常差(也许有办法加快速度?)

2 个答案:

答案 0 :(得分:1)

可能想查看OpenCV for Android

答案 1 :(得分:0)

您可以通过将图像拉入内存来使用原始Android位图功能,但允许Android在加载图像之前对其进行采样。

例如:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
Bitmap myBitmap = BitmapFactory.decodeStream(inputstream,null,options);

这会将位图加载到内存中,占用整个图像的一半内存。您可以尝试更改 inSampleSize ,以便更适合您的应用。

您还可以动态计算样本大小,如果您知道目标的最终图像大小,则可以在将图像加载到内存之前获取图像的当前文件大小,并使用等式计算样本大小 inSampleSize = OriginalSize / RequiredSize 。虽然样本大小最好在2的幂时使用,但您可以对此进行调整。

编辑: 这里有一个很好的例子https://stackoverflow.com/a/823966/637545