0
我有一个程序需要经常通过BufferedImages逐像素。正常情况下,效率对我来说无关紧要,但我真的希望每一毫秒都能得到。有没有更快的方法遍历Java中BufferedImage的像素?
举个例子,现在,以最快的方式,我发现图像中分离出红色通道看起来是这样的:
int[] rgb = image.getRGB(0, 0, img.getWidth(), img.getHeight(), null, 0, img.getWidth());
for(int i = 0; i < rgb.length; i ++)
rgb[i] = rgb[i] & 0xFFFF0000;
image.setRGB(0, 0, img.getWidth(), img.getHeight(), rgb, 0, img.getWidth());
这意味着它会通过图片以填充阵列,再次应用滤镜,最后第三次更新像素。另外考虑到任何alpha通道为0的像素都会被完全清零,它至少还要经过一次。我已经尝试在更传统的嵌套for循环中使用getRGB()和setRGB()的个别像素版本,但这甚至更慢(虽然可能需要更少的RAM,因为它没有int [ ])。
这是Iterable类型解决的那种问题,但我找不到任何将该原理应用于图像的方式。对于这个项目,如果它能够正常工作,那么对于那些不是“最佳实践”的黑客来说,我很好。
是否有任何方式迭代缓冲图像的原始数据?
这个问题已经有了答案。从这里开始http://stackoverflow.com/questions/1975824/fastest-way-to-compare-pixel-values-between-two-bufferedimages?rq=1并去 – gpasch
所以我已经在做整数颜色的一部分那唯一真正的新东西就是“但是总的来说,你应该只是窥探Raster和DataBuffer的性能。”你能更具体一点吗? – user3236716