[BMP]ビットマップ色の反転2 | Assertion Failed!

[BMP]ビットマップ色の反転2

以前 の色の反転処理は、ラスタオペレーションを利用したものであった。


今回はビット列を直接操作して反転を実現する。



Assertion Failed!-ビットマップ色の反転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);
  }
}


これだけ。以上。