greyscale.cpp
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:2k
源码类别:

图形图象

开发平台:

Visual C++

  1. /********************************************************************
  2. greyscale.cpp - ISee图像浏览器—图像处理模块图像灰度转换处理实现代码文件
  3.     版权所有(C) VCHelp-coPathway-ISee workgroup 2000 all member's
  4.     这一程序是自由软件,你可以遵照自由软件基金会出版的GNU 通用许可证
  5. 条款来修改和重新发布这一程序。或者用许可证的第二版,或者(根据你
  6. 的选择)用任何更新的版本。
  7.     发布这一程序的目的是希望它有用,但没有任何担保。甚至没有适合特定
  8. 目地的隐含的担保。更详细的情况请参阅GNU通用许可证。
  9.     你应该已经和程序一起收到一份GNU通用许可证(GPL)的副本。如果还没有,
  10. 写信给:
  11.     The Free Software Foundation, Inc.,  675  Mass Ave,  Cambridge,
  12.     MA02139,  USA
  13. 如果你在使用本软件时有什么问题或建议,用以下地址可以与我们取得联
  14. 系:
  15. http://isee.126.com
  16. http://www.vchelp.net
  17. 或:
  18. iseesoft@china.com
  19. 作者:临风
  20.    e-mail:ringphone@sina.com
  21.    功能实现:图像灰度转换
  22. 文件版本:
  23. Build 00617
  24. Date  2000-6-17
  25. ********************************************************************/
  26. #include "p_win.h"
  27. #include "..publicgol_proc.h"
  28. #include "filter.h"
  29. //灰度转换
  30. int DoGreyScale(LPIMAGEPROCSTR lpInfo)
  31. {
  32. //创建内存图像
  33.    lpInfo->_pdbdata = (unsigned char*)New(lpInfo->sImageInfo.width*lpInfo->sImageInfo.height*(lpInfo->sImageInfo.bitperpix/8));
  34.    if(lpInfo->_pdbdata==NULL)
  35.    {
  36.     lpInfo->result=PR_MEMORYERR;
  37.     return PROCERR_FALSE;
  38.    }
  39.    //填写新建图像信息
  40.    lpInfo->dImageInfo=lpInfo->sImageInfo;
  41. LPBYTE pRed=(LPBYTE)lpInfo->_psbdata,pdBuf=(LPBYTE)lpInfo->_pdbdata;
  42.    LPBYTE pGrn=pRed+1, pBlu=pRed+2;
  43. UINT loop=(UINT)(lpInfo->sImageInfo.width*lpInfo->sImageInfo.height);
  44.    int lum;
  45.    int skip=lpInfo->sImageInfo.bitperpix/8;
  46.    //灰度转换(361转换)
  47.    for (UINT i=0;i<loop;i++)
  48.    {
  49. lum = (int)(.299 * (double)(*pRed) + .587 * (double)(*pGrn) + .114 * (double)(*pBlu));
  50. *pdBuf = (BYTE)lum;
  51.       pdBuf++;
  52.       *pdBuf = (BYTE)lum;
  53.       pdBuf++;
  54.       *pdBuf = (BYTE)lum;
  55.       pdBuf+=(skip-2);
  56.       pRed+=skip;
  57.       pGrn+=skip;
  58.       pBlu+=skip;
  59. }
  60.    lpInfo->result=PR_SUCCESS;
  61.    return PROCERR_SUCCESS;
  62. }