解説
画像をグレースケール変換して指定されたしきい値を境に2つの色に変える。実行例
以下のコードで処理を施した。RGBTRIPLE rgbHigh; RGBTRIPLE rgbLow; rgbHigh.rgbtBlue = 100; rgbHigh.rgbtGreen = 255; rgbHigh.rgbtRed = 255; rgbLow.rgbtBlue = 0; rgbLow.rgbtGreen = 0; rgbLow.rgbtRed = 0; _cImage2.Bicolor(120,rgbHigh,rgbLow);

ソースコード
GDI+を利用した画像処理テストのスケルトン2を 元に拡張する。前に作成した「DnpImage.h」に2階調化関数を追加する。
class CDnpImage : public CDnpImageBase
,public CDnpImageConvolution
,public CDnpColorSpaceHLS
,public CDnpColorSpaceHSV
{
public:
//
// 画像の2階調化
//
//グレースケール変換したときの色値がcbThresholdを超えていればrgbHighに、
//下回ればrgbLowに変えて2階調化する。
//
bool Bicolor(BYTE cbThreshold,RGBTRIPLE rgbHigh,RGBTRIPLE rgbLow)
{
if(IsValidImage() == false)
return false;
int nStrideBytes;
bool ret;
UINT x;
UINT y;
UINT nWidth;
UINT nHeight;
BYTE* pData;
RGBTRIPLE* pRGB;
nWidth = GetWidth();
nHeight = GetHeight();
ret = LockBits(&pData,&nStrideBytes);
if(ret == false)
return false;
for(y = 0; y < nHeight; y++)
{
pRGB = (RGBTRIPLE*)pData;
for(x = 0; x < nWidth; x++)
{
BYTE cbTmp;
cbTmp = (BYTE)((77 * pRGB[x].rgbtRed + 150 * pRGB[x].rgbtGreen + 29 * pRGB[x].rgbtBlue) >> 8);
if(cbTmp > cbThreshold)
pRGB[x] = rgbHigh;
else
pRGB[x] = rgbLow;
}
pData += nStrideBytes;
}
UnlockBits();
return true;
}
。。。。省略。。。。
};
