java更高效的RGB到ARGB转换
我有这个工作代码,它读取一个700x700 RGB24 TIF文件,并将其放入显示内存。分配pixelARGB
值的行似乎效率极低,此代码需要3-4秒来重新绘制屏幕有没有办法避免移位和oring,只需将字节值放在32位字中的正确位置
在其他语言中,我用“叠加变量”或“变量记录”之类的语言来实现这一点。在Java中找不到这个。谢谢
for (y=0; y<700; y++) { // for each line
i = 0;
for (x=0; x<700; x++) { // for each dot
red = lineBuf[i++] & 0xFF;
green = lineBuf[i++] & 0xFF;
blue = lineBuf[i++]& 0xFF;
pixelARGB = 0xFF000000 | (red << 16)| (green << 8) | blue;
this_g.setPixel(x + BORDER, y + BORDER, pixelARGB);
}
size=is.read(lineBuf,0,2100);
}
# 1 楼答案
至少有一种方法可以更有效地将TIFF图像数据缓冲区转换为
Bitmap
,并且可以进行优化一,。使用
int[]
数组而不是像素副本:您仍然需要单独计算每个像素,但将它们设置为
int[]
数组。 正是setPixel()
功能占用了你所有的时间例如:
二,。在循环中调整大小:
这不太可能,但如果已知结果图像的目的地
ImageView
小于源图像(在您的问题中为700x700),则可以在for
循环中调整大小,以获得极高的性能提升你需要做的是循环遍历目标图像像素,计算源图像中需要的像素
x
,y
值,只计算这些像素的pixelARGB
值,填充一个较小的int[]
数组,最后生成一个较小的Bitmap
。很更快对于每个目标像素,你甚至可以通过自制的四个最近的源像素的立方插值来提高调整大小的质量,但我认为你会发现这对于显示来说是不必要的