值由图像给出,因此
typedef struct IMAGE{
uint8_t rgbtBlue;
uint8_t rgbtGreen;
uint8_t rgbtRed;
}IMAGE;
IMAGE image[height][width];
在函数中,我创建了另一个二维数组。
typedef struct BUFFER{
uint8_t rgbtBlue;
uint8_t rgbtGreen;
uint8_t rgbtRed;
}BUFFER;
BUFFER buffer[height][width];
计算后,我会将值返回,更新图像的值。
但我遇到了一个问题。例如:
int GxB, GyB;
buffer[i][j].rgbtBlue = round((double)sqrt(GxB * GxB + GyB * GyB));
if (buffer[i][j].rgbtBlue >= 255)
buffer[i][j].rgbtBlue = 255;
printf("%dn", buffer[i][j].rgbtBlue);
如果语句一直被忽略,我知道uint8_t一定有问题,因为在我将rgbtBlue更改为integer之后,一切都很好,If语句正在工作。我在网上搜索过,但找不到答案。任何提示都将不胜感激
uint8_t
的最大值为255。因此,
if (buffer[i][j].rgbtBlue >= 255)
buffer[i][j].rgbtBlue = 255;
指
if (buffer[i][j].rgbtBlue == 255)
buffer[i][j].rgbtBlue = 255;
它几乎什么也没做。
您可能想将round()
的结果存储到一个更大的类型中,以免导致截断,然后检查值,进行适当的处理并分配给buffer[i][j].rgbtBlue
,如下所示:
double round_res = round((double)sqrt(GxB * GxB + GyB * GyB));
if (round_res >= 255)
round_res = 255;
buffer[i][j].rgbtBlue = round_res;