解説
RGBのカラー画像CBitmap m_cBitmapをネガ画像に変換する。
変換は単にRGBのそれぞれを反転するだけ、下記の式を使用。
出力画素(R) = 255 - R
出力画素(G) = 255 - G
出力画素(B) = 255 - B
当然ながら2回変換すればもとの色調の画像に戻る。
//
// ネガポジ変換
//
bool CDIBitmap::InvertRGB(void)
{
int i;
int j;
int n;
BITMAP sBitmap;
DWORD dwLineBytes;
DWORD dwSizeImage;
BYTE* pBuffer;
m_lpcBitmap->GetBitmap(&sBitmap);
dwSizeImage = (DWORD)(sBitmap.bmWidthBytes * sBitmap.bmHeight);
dwLineBytes = sBitmap.bmWidthBytes;
pBuffer = new BYTE[dwSizeImage + 1];
m_lpcBitmap->GetBitmapBits(dwSizeImage,pBuffer);
n = 0;
for(j = 0; j < sBitmap.bmHeight; j++)
{
for(i = 0;i < sBitmap.bmWidth; i++)
{
pBuffer[n + 0] = 255 - pBuffer[n + 0];
pBuffer[n + 1] = 255 - pBuffer[n + 1];
pBuffer[n + 2] = 255 - pBuffer[n + 2];
n += 3;
}
n = j * dwLineBytes;
}
m_lpcBitmap->SetBitmapBits(dwSizeImage,pBuffer); //CBitmapへの保存
delete pBuffer;
return true;
}
