我需要提取以leftimage(x1,y1)为中心的(2n + 1)x(2m + 1)所描述的像素区域。 n和m是用户输入参数,xl和y1已经定义。到目前为止,我有这段代码:
for(int xl = n; xl < picOneGreyScale.getWidth() - n; xl++) {
for(int yl = m; yl < picOneGreyScale.getHeight() - m; yl++) {
//extract (2n+1) x (2m+1) pixel region centred on leftimage (xl,yl);
for(int nArea = xl-n; nArea < xl+n+1; nArea++) {
for(int mArea = yl-m; mArea < yl+m+1; mArea++) {
*code here*
}
}
我不确定如何继续。我已经定义了一个名为leftRegion的BufferedImage:
BufferedImage leftRegion = new BufferedImage((2*n+1),(2*m+1),BufferedImage.TYPE_BYTE_GRAY);
我打算用它来“提取”我的像素区域。到目前为止,我的想法是,在这里用代码来提取当前位置的像素(使用getRGB?),然后嵌套另一个for循环,将此像素放在正确的x,y坐标中leftRegion。我不确定如何做到这一点,或者我认为太复杂了。或者,也可以使用扩展参数的getRGB:
getRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)
而不是两个内部的for循环,但我再也不知道如何实现它。最后有一个名为copyData的BufferedImage方法看起来可能是相关的,但我不知道如何使用它。实现这个的最佳方法是什么?非常感谢。
其他信息:
好的,我正在尝试使用BufferedImage类的getSubImage方法:
leftRegion = picOneGreyScale.getSubimage(xl, yl, (2*n+1), (2*m+1));
只有我收到错误“(y + height)超出Raster”。 getSubImage如何正常工作?图像是否以xl,y1为中心,宽度和高度在两侧均匀延伸,还是以不同的方式工作?我是否遵循了正确的道路?
答案 0 :(得分:0)
我明白了。我只是用这个替换了两个内部for循环:
leftRegion = picOneGreyScale.getSubimage(xl-n, yl-n, (2*n+1), (2*m+1));