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;
コードはグレースケールにしません。1 つのイメージはよりセピア色で、もう 1 つのイメージはほぼグレースケールですが、色付きのハイライトがいくつかあります。
これはカラーマップと関係があると思います。パレットを介さずに RGB のみを使用するようにするにはどうすればよいですか? (ビット深度を変更しても問題ありません。)
ティア。