问题描述
值由图像给出,所以
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("%d\n",buffer[i][j].rgbtBlue);
如果语句一直被忽略,我知道 uint8_t 一定有问题,因为在我将 rgbtBlue 更改为整数后,一切正常,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;