2011-11-18 189 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));