我正在尝试解决滤镜灰度问题,在开始之前我一直在苦苦挣扎。
对于灰度,我们给出的公式是对RGB的值求平均值,然后将该值用作每个像素的新RGB值。将像素取平均值后,如何更新像素中的值?
我本以为可以创建一个Replace的布尔值并将其设置为false,然后在替换后将其设置为true,但是现在我想我忽略了一个更简单的方法。
当我不知道除“ height -1”行以外还有多少行时,如何将图像视为数组。
分配视频将像素格式的示例描述为:
image[2][3].rgtbBlue
image[2][3].rgbtGreen
image[2][3].rgbtRed
这是否意味着
((BYTE.rgbtBlue + BYTE.rgbtGreen + BYTE.rgbtRed) /3)
无法获得平均值吗?
这项工作可以吗?
for (int i = 0; i < height -1; i ++)
{
for (int j =0; j < height; j++)
{
image[i][j].rgbtBlue = round(((BYTE.rgbtBlue+ BYTE.rgbtGreen + BYTE.rgbtRed) /3));
image[i][j].rgbtGreen = round(((BYTE.rgbtBlue+ BYTE.rgbtGreen + BYTE.rgbtRed) /3));
image[i][j].rgbtRed = round(((BYTE.rgbtBlue+ BYTE.rgbtGreen + BYTE.rgbtRed) /3));
}
}
答案 0 :(得分:0)
void grayscale(int height, int width, RGBTRIPLE image[height][width])
{
// Locate the pixel
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
// Find the average pixel color
float avgpixel = round((image[j][i].rgbtBlue + image[j][i].rgbtGreen + image[j][i].rgbtRed) / 3.00);
// Replace the grayscale pixel to all colors
image[j][i].rgbtBlue = avgpixel;
image[j][i].rgbtGreen = avgpixel;
image[j][i].rgbtRed = avgpixel;
}
}
return;
}