【发布时间】:2020-03-02 09:15:43
【问题描述】:
我正在为作为结构传入的图像制作灰度过滤器,并且是图像[高度] [宽度]。所有值似乎都在工作,但由于某种原因,该函数无法正确舍入。例如,如果 RGB 值为 27 28 28,则 avg 应该是 28,但实际上是 27,所以它复制为 27 27 27。为什么?
// Convert image to grayscale
void grayscale(int height, int width, RGBTRIPLE image[height][width])
{
for (int i = 0; i < height; i++)
{
for (int w = 0; w < width; w++)
{
float avg = ((image[i][w].rgbtRed + image[i][w].rgbtGreen + image[i][w].rgbtBlue) / 3);
image[i][w].rgbtRed = round(avg);
image[i][w].rgbtGreen = round(avg);
image[i][w].rgbtBlue = round(avg);
}
}
return;
}
【问题讨论】:
-
是
RGBTTRIPLE.rgbtRed等整数类型吗?如果是这样,您的avg声明将采用整数除法的结果。将您的3更改为3.0。