使用 setRGB 和 getRGB 方法处理BufferedImage时,我注意到两件事:
setRGB 和 getRGB 方法在某些系统上可能会非常慢(比修改int []数组慢两个数量级)。
无法保证 setRGB 后面的 getRGB 会返回您传递的相同像素
最后一点基本上非常清楚 setRGB 的JavaDoc,其中指出:
...对于带有IndexColorModel的图像, 最接近颜色的索引是 选择的。
看到我可以直接在BufferedImage的int []像素中工作,我可以通过这样做来访问,例如:
int[] a = ((DataBufferInt) tmp.getRaster().getDataBuffer()).getData();
我想知道:直接操纵int[]
中的像素是否有任何已知的缺点/陷阱?
答案 0 :(得分:4)
getData()的全部内容使您可以访问支持int数组,这正是为了优化,所以最有可能带来的好处就是缺点。
缺点取决于您如何使用缓冲图像。如果您在编辑时将其绘制到屏幕上,则可能会在屏幕上遇到一些瑕疵(如未及时着色的像素),在这种情况下,您应该考虑双缓冲(这涉及复制整个图像)每次刷新)。
答案 1 :(得分:0)
不确定这是否与您的问题相关,但在使用getSubimage(int x, int y, int w, int h)
方法创建BufferedImage时会遇到问题。
返回由指定矩形区域定义的子图像。该 返回BufferedImage与原始数据共享相同的数据数组 图像。
方法getTileGridXOffset()
和getTileGridYOffset()
返回偏移量,尽管被描述为
返回tile网格相对于原点的x偏移量For 例如,tile(0,0)的位置的x坐标。 这是 永远为零。
但是因为你不能(据我所知)访问栅格的scanlineStride
字段,你将无法获得该数组的正确索引。