2011-11-18 196 views
0

我需要提取由(2n + 1)x(2m + 1)描述的像素区域,集中在左图像(xl,yl)上。 n和m是用户输入参数,xl和yl已经定义。到目前为止,我有这样的代码:从图像中提取一个矩形像素区域

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:

我打算用它来“解压”我的像素区域之中。到目前为止,我的想法是,因为它说代码代码在当前位置提取像素(使用getRGB?),然后嵌套另一个循环以将此像素放置在正确的leftRegion的x,y坐标内。我不知道如何做到这一点,或者如果我想太复杂。或者有可能使用的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 +高度)之外的光栅”。 getSubImage如何工作?图像是否以xl,yl为中心,宽度和高度是同等延伸的,还是以不同的方式工作?我是否遵循正确的道路?

+0

我也在研究一个名为CropImageFilter的类,我不知道这是否会做我所需要的。如果有人能指出我如何做到这一点的正确方向,你就会拥有我所有的爱。和培根。 *免责声明:培根可能不提供 – cherryduck

回答

0

我想通了。我简单地用这个替换了两个内部循环:

leftRegion = picOneGreyScale.getSubimage(xl-n, yl-n, (2*n+1), (2*m+1));