2013-03-29 50 views
-1

我必須得到的值,我必須匹配我的圖像中的像素值。但是當我運行這個代碼時,我得到StackOverflowError當我運行此代碼時,出現stackoverflow錯誤

如何在java中增加棧內存來克服這個問題。

public class ImageToText { 
    private final int ALPHA = 24; 
    private final int RED = 16; 
    private final int GREEN = 8; 
    private final int BLUE = 0; 

    public static void main(String args[]) throws IOException { 
     File file = new File("C:\\image.jpg"); 
     BufferedImage image = ImageIO.read(file); 
     int color21=image.getHeight(); 
     int color31=image.getWidth(); 
     getRGBA(image,color31,color21); 

     for (int i = 0; i < image.getHeight(); i++) 
     { 
      for (int j = 0; j < image.getWidth(); j++) 
      { 
       int color = image.getRGB(j, i); 
       int color2=image.getHeight(); 
       int color3=image.getWidth(); 
       System.out.println(color2); 
      } 
     } 
    } 

    public static int[] getRGBA(BufferedImage img, int x, int y) 
    { 
     int[] color = new int[4]; 
     int[] originalPixel = getRGBA(img,x,y); 

     for (int i=0;i<img.getWidth();i++) 
     { 
      for (int j=0;j<img.getHeight();j++) 
      { 
       int[] color1 = getRGBA(img,i,j); 

       if (originalPixel[0] == color1[0] && originalPixel[1] == color1[1] && originalPixel[2] == color1[2] && originalPixel[3] == color1[3]) 
       { 
        img.setRGB(i, j,Color.red.getRGB()); 
       } 
       else 
       { 
        img.setRGB(i, j,Color.yellow.getRGB()); 
       } 
      } 
     } 
     return color; 
    } 
} 

如何克服此錯誤?

+1

顯示錯誤堆棧跟蹤PLS – PSR

+0

'公共靜態INT [] getRGBA(BufferedImage的IMG,INT的x,int y)對 { INT []顏色=新INT [4]; int [] originalPixel = getRGBA(img,x,y);'這將永遠循環。你必須找到另一種做你想做的事情的方式。 – Nbr44

+0

我想克服這個錯誤以及如何解決這個問題。我必須匹配像素,如果像素值匹配,我會更改像素值。 –

回答

4

getRGBA自稱無限:

public static int[] getRGBA(BufferedImage img, int x, int y) 

    { 

int[] color = new int[4]; 


int[] originalPixel = getRGBA(img,x,y); 

這樣的事情引起的StackOverflowError。

考慮加入遞歸的基本情況,讓你的代碼並不總是稱自己並有「出路」。

+0

所以告訴我要解決這個問題 –

0

這條線功能getRGBA:

int[] originalPixel = getRGBA(img,x,y); 

這應當引起無限遞歸。

0

main方法你調用以下getRGBA方法。在getRGBA方法中,您將再次調用該方法。這使循環/遞歸執行沒有退出條件。

public static int[] getRGBA(BufferedImage img, int x, int y) { 
    int[] color = new int[4]; 
    int[] originalPixel = getRGBA(img,x,y); 
} 

您必須在方法調用周圍添加一些條件,以便遞歸執行停止。您的功能不夠清楚,無法說明您可以放置​​什麼條件。

public static int[] getRGBA(BufferedImage img, int x, int y) { 
    int[] color = new int[4]; 
    if (some condition which becomes true) { 
     int[] originalPixel = getRGBA(img,x,y); 
    } 
} 
相關問題