至少有一种方法可以将TIFF图像数据缓冲区转换为
Bitmap
并且有可能进行优化。
1.使用
int[]
数组而不是像素副本:
您仍然需要单独计算每个像素,但在
整数[]
大堆
它是
setPixel()
占用您所有时间的功能。
例子:
final int w = 700;
final int h = 700;
final int n = w * h;
final int [] buf = new int[n];
for (int y = 0; y < h; y++) {
final int yw = y * w;
for (int x = 0; x < w; x++) {
int i = yw + x;
// Calculate 'pixelARGB' here.
buf[i] = pixelARGB;
}
}
Bitmap result = Bitmap.createBitmap(buf, w, h, Bitmap.Config.ARGB_8888);
2.在循环中调整大小:
这不太可能,但以防你的目的地
ImageView
由于已知结果图像小于源图像,在您的问题中为700x700,因此您可以在
for
循环以获得极高的性能提升。
你要做的是循环浏览你的目标图像像素,计算像素
x
,
y
从源图像中计算所需的值
pixelARGB
值,填充较小的
整数[]
数组,最后生成一个较小的
位图
很更快。
您甚至可以通过自制的三次插值来提高调整大小的质量,为每个目标像素提供四个最近的源像素,但我认为出于显示目的,您会发现这是不必要的。