c-if语句被忽略,uint8_t有问题



值由图像给出,因此

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;

最新更新