我试图编写一个程序来查找"图像的像素高度"。 "图像"是0和0的2D数组,0是白色空间,1是黑色像素。
嵌套循环从左到右穿过数组,首先穿过x轴,然后穿过y轴。
我试图找到y值的最高值。计划是在新数组中将所有y值存储在0以上,并找到最高的y值。但是,由于某种原因,下面的代码只将y = 5存储到数组中。
我认为订单错了?
#include <stdio.h>
#define MAX_X 20
#define MAX_Y 20
void printImage(int image[MAX_X][MAX_Y]);
int countBlackPixels(int image[MAX_X][MAX_Y]);
int findYPixel(int image[MAX_X][MAX_Y]);
//function prototypes
void processImage(int image[MAX_X][MAX_Y]) {
int yPixel;
yPixel = findYPixel(image);
printf("Height: %d\n", yPixel);
}
//Height
//Calculates height of image
int findYPixel(int image[MAX_X][MAX_Y]) {
int x, y, yPixel, i;
int new_array[MAX_Y-1];
x = 0;
yPixel=-1;
while (x < MAX_X) {
y = MAX_Y-1;
while (y > 0) {
if (image[x][y] == 1) {
yPixel=y;
}
y = y - 1;
}
x = x + 1;
}
return yPixel;
}
有没有人知道我哪里出错了?
答案 0 :(得分:1)
此循环将数组中的所有值分配给当前y
值:
for(i=0; i < MAX_Y; i++) {
new_array[i] = y; //store all y values in a new array
}
这就是为什么你最后只得到一个值。
您甚至不需要存储y
值的数组。只要在2D阵列中找到第一个非零条目,就可以返回当前y
值作为答案。 (这假设您开始在图像的顶部进行搜索并向下工作。)
即使从下往上循环,您仍然不需要数组。每次遇到非零像素时,只需更新yPixel = y;
即可。在循环结束时,yPixel
将是最高非空白像素的y值。您应该从yPixel = -1
或其他东西开始,这有助于您在整个图像为空白时识别出这种情况。