[BMP]ビットマップ色の反転2
以前 の色の反転処理は、ラスタオペレーションを利用したものであった。
今回はビット列を直接操作して反転を実現する。
実際にやっていることは簡単であり、イメージデータのバイト列を
そのままビット反転するだけである。
StretchDIBits で使用したコードをほぼ流用して以下のように描画部を
書いた。
(ビットマップ読み込み部等は上記リンク参照)
void CStretchDIBitsDlg::OnPaint()
{
if (IsIconic())
{
・・・中略
}
else
{
CPaintDC dc(this);
int nWidth = m_bih.biWidth;
int nHeight = m_bih.biHeight;
CBitmap bmp;
BYTE *pImg;
HBITMAP hbmp = (HBITMAP)::CreateDIBSection(dc.GetSafeHdc(), (BITMAPINFO*)&m_bih,
DIB_RGB_COLORS,(void**)&pImg,NULL,0);
memcpy(pImg, m_pImg, m_bih.biSizeImage);
bmp.Attach(hbmp);
// 反転処理
int nImgLen = m_bih.biSizeImage;
for (int i = 0; i < nImgLen; i++)
{
m_pImg[i] = ~m_pImg[i];
}
// 元画像と幅と高さは変更していないので等倍表示
::StretchDIBits(dc.GetSafeHdc(), 0, 0, nWidth, nHeight,
0, 0, m_bih.biWidth, m_bih.biHeight, m_pImg,
(BITMAPINFO*)&m_bih, DIB_RGB_COLORS, SRCCOPY);
}
}
これだけ。以上。