我的程序中有一些代码。如你所见,我得到了矩阵中Image的所有像素。 在此代码中,我收到高度和重量,并成功计算图像中的总像素。
public static void GetMatrix(File input) {
File file = input;
try {
Image image = ImageIO.read(file);
int[][] matricesA = new int[image.getWidth(null)][image.getHeight(null)];
System.out.println("Total Pixel : " + image.getWidth(null) * image.getHeight(null));
System.out.println(fProjectionH(matricesA));
} catch (IOException ex) {
Logger.getLogger(MatrixCompare.class.getName()).log(Level.SEVERE, null, ex);
}
}
当计算水平投影时,我不会收到数组的所有元素(只有方形矩阵,例如,[120] * [120]),但Image实际上包含[210] [120 ] 这是寻找投影的代码
public static int fProjectionH(int[][] a) throws IOException
{
int err = 0;
for(int j=0; j < a[j].length; j++){
for(int i=0; i < a[i].length; i++){
int alt = a[j].length;
int[] proj = new int[alt];
if(a[j][i] == 255) {proj[j] += 1;}
System.out.println("a["+j+"]"+"["+i+"]="+proj[j]);
}
}
return err;
}
我如何解决这个问题?
提前致谢!
UPD 1:我已经尝试了很多东西。
for(int i=0; i < a.length; i++){
for(int j=0; j < a[j].length; j++){
UPD 2:忘记提及,我发布数组来运行 的System.out.println(的 fProjectionH (matricesA));
UPD 3:
private static void handlepixels(Image img, int x, int y, int w, int h, int[][] matrices) {
int[] pixels = new int[w * h];
PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);
try {
pg.grabPixels();
} catch (InterruptedException e) {
System.err.println("interrupted waiting for pixels!");
return;
}
if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
System.err.println("image fetch aborted or errored");
return;
}
for (int j = 0; j < h; j++) {
for (int i = 0; i < w; i++) {
matrices[i][j] = handlesinglepixel(x + i, y + j, pixels[j * w + i]);
}
}
}
UPD 4:我上传了GitHub [link] https://github.com/aydin1918/test
答案 0 :(得分:6)
将for循环更改为:
for(int j=0; j < a.length; j++){
for(int i=0; i < a[j].length; i++){
//do stuff
}
}
您的外部循环仅循环到120
,因为您只是循环到a[j].length
120
。您想要循环到a.length
210
。希望这可以帮助。
示例:
int[][] a = new int[210][120];
int count = 0;
for(int j=0; j < a.length; j++){
for(int i=0; i < a[j].length; i++){
count++;
}
}
System.out.println(count);
输出:
25200