2014-01-09 23 views
0

我還是Java的新手。我在從我的方法中檢索RGB像素值時遇到了麻煩,compareHexaRGB在這種方法中我可以根據2個相似圖像的比較獲得差異像素值。我嘗試了printString2DArray方法,但它不起作用。它聲明不兼容的類型:String [] []不能轉換爲String []或產生錯誤,例如[[Ljava.lang.String; @ 6d09a8df想從其他方法檢索RGB像素值,但無法檢索它

獲得值後,我想將它合併一個十六進制值然後將其轉換爲ASCII字符。由於檢索值無法正常工作,我無法繼續執行此過程。

這裏是compareHexaRGB代碼()方法:

public class compareHexaRGB 
{ 
private static int w; 
private static int h; 
private static BufferedImage img; 
private static BufferedImage img2; 
private static String[][] check_hex2; 
private static String[][] check_hex4; 
private static String[][] message; 

public static void compareHexaRGB(BufferedImage image, BufferedImage image2, int width, int height) throws IOException 
{ 
w = width; 
h = height; 
img = image; 
img2 = image2; 

} 

public void check() throws IOException 
{ 
    getPixelRGB1 pixel = new getPixelRGB1(); 
    getPixelData1 newPD = new getPixelData1(); 

    int[] rgb; 
    int count = 0; 

    int[][] pixelData = new int[w * h][3]; 
    check_hex2 = new String[w][h]; 
    check_hex4 = new String[w][h]; 

    for(int i = 0; i < w; i++) 
    { 
     for(int j = 0; j < h; j++) 
     { 
      rgb = newPD.getPixelData(img, i, j); 

      for(int k = 0; k < rgb.length; k++) 
      { 
       pixelData[count][k] = rgb[k]; 
      } 

       if(pixel.display_imgHex2()[i][j].equals(pixel.display_img2Hex2()[i][j])) 
       { 
        System.out.println("\nPixel values at position 2 are the same." + "\n" + pixel.display_imgHex2()[i][j] + " " + pixel.display_img2Hex2()[i][j]); 
       } 
       if(pixel.display_imgHex4()[i][j].equals(pixel.display_img2Hex4()[i][j])) 
       { 
        System.out.println("\nPixel values at position 4 are the same." + "\n" + pixel.display_imgHex4()[i][j] + " " + pixel.display_img2Hex4()[i][j]); 
       } 
       if(!pixel.display_imgHex2()[i][j].equals(pixel.display_img2Hex2()[i][j])) 
       { 
        System.out.println("\nPixel values at position 2 are not the same." + "\n" + pixel.display_imgHex2()[i][j] + " " + pixel.display_img2Hex2()[i][j]); 
        check_hex2[i][j] = pixel.display_img2Hex2()[i][j]; 
        System.out.println("\nOutput Hex 2: " + check_hex2[i][j]); 
       } 
       if(!pixel.display_imgHex4()[i][j].equals(pixel.display_img2Hex4()[i][j])) 
       { 
        System.out.println("\nPixel values at position 4 are not the same." + "\n" + pixel.display_imgHex4()[i][j] + " " + pixel.display_img2Hex4()[i][j]); 
        check_hex4[i][j] = pixel.display_img2Hex4()[i][j]; 
        System.out.println("\nOutput Hex 4: " + check_hex4[i][j]); 
       } 
       if(!pixel.display_imgHex2()[i][j].equals(pixel.display_img2Hex2()[i][j]) || (!pixel.display_imgHex4()[i][j].equals(pixel.display_img2Hex4()[i][j]))) 
       { 
        System.out.println("\nOne of the pixel values at position 2 and 4 are not the same." + "\n" + pixel.display_imgHex2()[i][j] + " " + pixel.display_img2Hex2()[i][j] + "\n" + pixel.display_imgHex4()[i][j] + " " + pixel.display_img2Hex4()[i][j]); 

        if(!pixel.display_imgHex2()[i][j].equals(pixel.display_img2Hex2()[i][j]) || (pixel.display_imgHex2()[i][j].equals(pixel.display_img2Hex2()[i][j]))) 
        { 
         check_hex2[i][j] = pixel.display_img2Hex2()[i][j]; 
         System.out.println("\nOutput Hex 2: " + check_hex2[i][j]); 
        } 

        if(!pixel.display_imgHex4()[i][j].equals(pixel.display_img2Hex4()[i][j]) || (pixel.display_imgHex4()[i][j].equals(pixel.display_img2Hex4()[i][j]))) 
        { 
         check_hex4[i][j] = pixel.display_img2Hex4()[i][j]; 
         System.out.println("\nOutput Hex 4: " + check_hex4[i][j]); 
        } 

       } 
      count++; 
      System.out.println("\nOutput Count: " + count); 
     } 

    } 

} 

public String[][] getCheck_hex2() 
{ 
    return check_hex2; 
} 

public String[][] getCheck_hex4() 
{ 
    return check_hex4; 
} 
} 

代碼extractMessage()方法:

public class extractMessage 
{ 
private static String character; 
private static String[][] char1; 
private static String[][] char2; 
private static int w; 
private static int h; 

public static void printString2DArray(String[][] inn) 
{ 
    for (int i = 0; i < inn.length; i++) 
    { 
     for(int j = 0; j < inn[i].length; j++) 
     { 
      if (i != 0 && j == 0) 
      { 
       System.out.print(" "); 
      } 
      System.out.println(inn[i][j]); 
     } 
    } 
} 

public static void charExtract() 
{ 
compareHexaRGB hexRGB = new compareHexaRGB(); 

char1 = hexRGB.getCheck_hex2(); 

    System.out.println("Char 1: "); 
    printString2DArray(char1); 

} 

public String convertHexToString() 
{ 
StringBuilder sb = new StringBuilder(); 
StringBuilder temp = new StringBuilder(); 

extractMessage extract = new extractMessage(); 
extract.charExtract(); 

for(int i = 0; i < extract.length(); i+=2) //error stated couldn't find symbol extract 
{ 
String output = extract.substring(i, (i + 2)); 
int decimal = Integer.parseInt(output, 16); 
sb.append((char)decimal); 

temp.append(decimal); 
} 
return sb.toString(); 
} 
} 

任何幫助,我將不勝感激!

編輯:我現在更改代碼。輸出產生這樣的結果。

Char 1: 
null 
null 
null 
null 
null 
null 
null 
null 
6 
6 
null 
null 
6 
null 
null 
null 
null 
null 

它不應該輸出這樣的權利?我不想要空字符,但我只想要價值。我應該怎麼做呢?

回答

0

printString2DArray方法應該是這樣的:

private static void printString2DArray(String[][] in) 
{ 
    for (int i = 0; i < in.length; i++) { 
     for (int j = 0; j < in[i].length; j++) { 
      if (i != 0 && j == 0) { // This is just formatting (you may want to change it) 
       System.out.print(", "); 
      } 
      System.out.print(in[i][j]); 
     } 
    } 
} 

要遍歷數組String[][]你可以使用2個指數(ij)結束,因爲它是一個2維數組。

編輯:

取而代之的是:

char1 = new String[][] 
{ 
new String[] { hexRGB.getCheck_hex2() } //error stated incompatible types 
}; 

你可以嘗試:

char1 = hexRGB.getCheck_hex2(); 
+0

我已經做了,但在我的charExtract()仍然有錯誤不兼容的類型:字符串[] []不能轉換爲字符串[]。 public static void charExtract() { compareHexaRGB hexRGB = new compareHexaRGB(); char1 = new String [] [] { new String [] {hexRGB.getCheck_hex2()} }; System.out.println(「Char 1:」); printString2DArray(hexRGB.getCheck_hex2()); }你可以檢查嗎? – user3116040

+0

我也這樣做了,但我仍然得到相同的錯誤不兼容的類型。在將String []更改爲String [] []後,它不應該得到該錯誤? hmm – user3116040

+0

不,你確定變量的類型與你賦值的類型相同嗎?如果'getCheck_hex2'返回一個'String [] []','char1'應該是'String [] []'類型。檢查所有變量。 – Christian