No.1の続きです。
以下はNo.1の関数から呼び出されるグレースケール取得関数です。
//bmp … BITMAP構造体
//戻り値 … グレースケール配列
unsigned char* GetGrayscaleBytesFromBitmap(BITMAP bmp)
{
if(bmp.bmBitsPixel!=32)return NULL; //簡略化のため32bitのみ対応します。
int w = bmp.bmWidth; //幅
int h = bmp.bmHeight; //高さ
int len = w*h; //グレースケール配列のサイズ
unsigned char* buf = (unsigned char*)bmp.bmBits; //画像のピクセルバッファ
unsigned char* result = (unsigned char*)malloc(len); //グレースケール配列の確保
for(int i=0,j=0;i<len;i++,j+=4){ //グレースケールは1画素1バイト、画像は1画素4バイト
//RGBからグレースケールへの変換
//R:G:Bをおよそ3:6:1でブレンドしたものがグレー値。
result[i] = (unsigned char*)((buf[j+2]*3+buf[j+1]*6+buf[j])/10);
}
return result;
}
動作確認等は全くしていないので、適宜修正して下さい。
引数のBITMAP構造体は、WindowsAPIのLoadBitmap()等の関数で取得したビットマップハンドルから、GetObject()で取りだせます。
お礼
ありがとうございました。 思っていた通りの処理ができましたっ!^^/