使用 EasyBMP 库(无论如何,这是一个紧密的改编),我有将 BMP 转换为灰度的代码。
int monochromeValue (RGBApixel foo)
{
return (foo.Red+foo.Green+foo.Blue)/3;
}
void setToColor (RGBApixel* loc, int newColor)
{
loc->Red = loc->Green = loc->Blue = newColor;
}
void greyscaleImage (BMP* image)
{
int x, y;
for (x = 0; x < image->Width; ++x)
for (y = 0; y < image->Height; ++y)
{
RGBApixel* pixel = elementAt (image, x, y);
setToColor (pixel, monochromeValue (*pixel));
}
}
一个 RGBA 像素是
typedef unsigned char ebmpBYTE;
typedef struct RGBApixel
{
ebmpBYTE Blue;
ebmpBYTE Green;
ebmpBYTE Red;
ebmpBYTE Alpha;
} RGBApixel;
该代码不会使其成为灰度。一张图像是棕褐色的,另一张图像大部分是灰度的,但有一些彩色高光。
我假设这与颜色图有关。我该怎么做才能使它只使用 RGB,而不通过调色板运行它?(如果可以的话,更改位深度很好。)
TIA。