这是我的代码:
public static void decodeThis(BufferedImage im, String outputFile)
throws FileNotFoundException{
int w = im.getWidth();
int h=im.getHeight();
int[] arr=im.getRGB(0, 0, w, h, null, 0, w);
int[] eightBit=new int[8];
int counter=0;
String[] aString=new String[arr.length];
PrintStream out=new PrintStream(new File(outputFile));
double value=0;
int intVal=0;
while (counter<arr.length){
for (int j=0;j<eightBit.length;j++){
eightBit[j] = arr[j+counter] & 1; //Extracts least significant bit, puts into eightBit array.
}
value=0;
for (int x=0;x<eightBit.length;x++){
value+=eightBit[x]*(Math.pow(2,x));
}
intVal=(int)value;
out.print((char)intVal);
counter=counter+8;
}
}
我想要做的是从arr读取,提取和转换为8位字符,同时仍然有像素在arr中读取。出于某种原因,当我运行注释for循环时,我得到一个ArrayIndexOutOfBoundsException。我该如何解决?提前谢谢!
答案 0 :(得分:2)
while(counter<arr.length)
循环运行counter
到arr
的长度,内循环使用arr
访问j+counter
;如果arr
不是8的完全倍数,则保证在arr
结束时运行。
由于arr
是图像中的位数,因此它不太可能是8的精确倍数。
答案 1 :(得分:0)
更改循环条件。
while (counter <= arr.length - 8)