今天正式开始图像处理编程,以后就借助这个平台记录自己的感想和收获。知识源于积累,让我们一起共同进步吧!

    由于做一个工程上用到的算法,需要用到CDib类和相应的图像处理算法。找来周长发那本《精通Visaul C++图像处理编程》中的代码作参考。用完之后发现Bug还真不少。暂时把找到的几个记录如下:

    1. CDib::ChangeToGrayscale函数中的下面这段代码应该注释掉,否则会引起内存泄露。

 if (m_pPalette != NULL)
 {
  delete m_pPalette;
  m_pPalette = NULL;
 }
 HPALETTE hPalette = CreateDIBPalette(m_hDib);
 if (hPalette == NULL)
  return FALSE;
 m_pPalette = new CPalette;
 m_pPalette->Attach(hPalette);

    2. dibapi.h中的#define PIXEL_OFFSET(i, j, nWidthBytes) \
  (LONG)((LONG)(i)*(LONG)(nWidthBytes) + (LONG)(j)*3)应该改为

#define PIXEL_OFFSET(i, j, nWidthBytes) \
  (LONG)((LONG)(i)*(LONG)(nWidthBytes) + (LONG)(j))

    3.CImageProcessView::OnSobel中的OnRealizePal函数调用最好去掉,这个消息相应函数是由系统自动调用的。

    4.EdgeDetectDIB中的abs函数调用会引起很多编译警告,最好定义如下的宏

#ifndef MYABS

#define MYABS(a) (((a)>0)?(a):(-a))

#endif