WEB开发网
开发学院软件开发VC 通用图像类算法扩充库 阅读

通用图像类算法扩充库

 2010-07-25 20:46:48 来源:WEB开发网   
核心提示:3、现在,进入最重要的一环,通用图像类算法扩充库(2),在FCObjImage类中添加方法:void SinglePixelProcessProc (FCSinglePixelProcessBase & PixelProcessor, FCObjProgress * progress = NULL)并把下面的实现代码拷

3、现在,进入最重要的一环,在FCObjImage类中添加方法:

void SinglePixelProcessProc (FCSinglePixelProcessBase & PixelProcessor, FCObjProgress * progress = NULL)

并把下面的实现代码拷到FCObjImage类中:

//================================================================
void FCObjImage::SinglePixelProcessProc (FCSinglePixelProcessBase & PixelProcessor, FCObjProgress * progress)
{
  if (!PixelProcessor.ValidateColorBits (this))
    return ;

  // 计算处理区域
  RECT    rcImg = {0,0,Width(),Height()}, rcBlock, rcDest ;
  if (PixelProcessor.GetProcessRect() == NULL)
    ::CopyRect (&rcBlock, &rcImg) ;
  else
    ::CopyRect (&rcBlock, PixelProcessor.GetProcessRect()) ;
  if (::IntersectRect (&rcDest, &rcImg, &rcBlock) == 0)
    return ; // 处理区域为空

  // 处理前准备工作
  int   nSpan = ColorBits() / 8 ; // 每象素字节数1, 2, 3, 4
  PixelProcessor.OnEnterProcess (this, rcDest) ;

  // 遍历处理区域像素
  for (int y=rcDest.top ; y < rcDest.bottom ; y++)
  {
    BYTE  * pPixel = GetBits (rcDest.left, y) ;
    for (int x=rcDest.left ; x < rcDest.right ; x++, pPixel += nSpan)
    {
      PixelProcessor.ProcessPixel (this, x, y, pPixel) ;
    }
    if (progress != NULL)
      progress->SetProgress (y * 100 / Height()) ;
  }

  // 收尾工作
  PixelProcessor.OnLeaveProcess (this) ;
}//================================================================

4、修改库里的 PixelProcessor.cpp 文件,把FCObjImage所在的.h文件包含进去。

现在,您就可以通过如下方法调用本库:

imgTest.SinglePixelProcessProc (FCPixelGrayscale()) ;
  imgTest.SinglePixelProcessProc (FCPixelInvert()) ;
  ......

本文配套源码

上一页  1 2 

Tags:通用 图像 算法

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接