【发布时间】:2013-03-27 19:29:32
【问题描述】:
我有这个工作代码,它读入一个 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);
}
【问题讨论】:
-
你试过了吗? int ARGB = new Color(red, green, blue, alpha).getRGB();
-
lineBuf是什么类型的数组,如果是int数组,则浪费了大量内存/时间,如果不是,则浪费了所有& 0xFF掩码。跨度> -
Serdalis: LineBuf 是一个字节数组,你是对的 & 0xFF 显得浪费了。我会删除它并重新测试。谢谢。 Pragnini:谢谢,我会试试的。
-
Serdalis:如果我移除遮罩,那么显示的最终像素会损坏;显然发生了符号扩展,当设置最高位时,所有位都变为“1”,导致白色显示。
-
Pragnani:我能够将旋转和移位替换为:pixelARGB=Color.argb(alpha,red,green,blue);这与您的建议相似;但是,性能保持不变。正如大卫(下文)所建议的那样,由于有大量的 setPixel 调用,它一定很慢。感谢您的帮助。
标签: java android graphics rgb argb