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
它不應該輸出這樣的權利?我不想要空字符,但我只想要價值。我應該怎麼做呢?
我已經做了,但在我的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
我也這樣做了,但我仍然得到相同的錯誤不兼容的類型。在將String []更改爲String [] []後,它不應該得到該錯誤? hmm – user3116040
不,你確定變量的類型與你賦值的類型相同嗎?如果'getCheck_hex2'返回一個'String [] []','char1'應該是'String [] []'類型。檢查所有變量。 – Christian