CImage灰度化
2015-09-17 13:53
288 查看
BOOL ImageToGray(const CImage& imgSrc, CImage& imgDst) { int maxY = imgSrc.GetHeight(); int maxX = imgSrc.GetWidth(); if (!imgDst.IsNull()) { imgDst.Destroy(); } imgDst.Create(maxX, maxY, 8, 0);//图像大小与imgSrc相同,每个像素占1字节 //为imgDst构造256阶灰度调色表 RGBQUAD ColorTab[256]; for (int i = 0; i < 256; i++) { ColorTab[i].rgbBlue = ColorTab[i].rgbGreen = ColorTab[i].rgbRed = i; } imgDst.SetColorTable(0, 256, ColorTab); //获取指向图像数据的指针 //GetBits 与 GetPitch 关系: //当GetPitch()<0时,GetBits()获得的指针指向最后一行 //当GetPitch()>0时,GetBits()获得的指针指向第一行 byte* pDataDst = NULL; byte* pDataSrc = NULL; if (imgDst.GetPitch() < 0) pDataDst = (BYTE*)imgDst.GetBits() + (imgDst.GetPitch()*(imgDst.GetHeight() - 1)); else pDataDst = (BYTE*)imgDst.GetBits(); if (imgSrc.GetPitch() < 0) pDataSrc = (BYTE*)imgSrc.GetBits() + (imgSrc.GetPitch()*(imgSrc.GetHeight() - 1)); else pDataSrc = (BYTE*)imgSrc.GetBits(); //获取每行图像占用的字节数 int pitchSrc = abs(imgSrc.GetPitch()); int pitchDst = abs(imgDst.GetPitch()); // 获取每个像素占用的字节数 int bitCountSrc = imgSrc.GetBPP() / 8; if (bitCountSrc == 1) { imgDst = imgSrc; return TRUE; } if ((bitCountSrc != 3) && (bitCountSrc != 4)) return FALSE; byte tmpR, tmpG, tmpB; int temGray; for (int i = 0; i < maxY; i++) { for (int j = 0; j < maxX; j++) { byte * ptmpSrc = pDataSrc + pitchSrc*i + j*bitCountSrc; tmpB = *ptmpSrc++; tmpG = *ptmpSrc++; tmpR = *ptmpSrc; temGray = (tmpR * 19595 + tmpG * 38469 + tmpB * 7472) >> 16; *(pDataDst + pitchDst*i + j) = temGray; } } return TRUE; }
相关文章推荐
- valgrind 内存检测工具用法
- linux学习笔记---文件与目录管理
- Android多线程任务优化1:探讨AsyncTask的缺陷
- Vault.com发布2016年咨询公司排行榜
- HTML 空格
- 未备案域名打开国内服务器上的网站(绑定国外空间并判断url后跳转引用)
- LeetCode_OJ【25】Reverse Nodes in k-Group
- PDFBox 解析PDF文档
- WordPress主题基础
- Double 和 Float
- WPF实现强大的动态公式计算
- IT人员如何有效规划自己时间
- iOS基础知识
- 关于安卓开发选择android 4.2.2(API 17)应用无法打开的解决办法
- 趣味题
- iOS学习总结----核心动画
- 集合容器 概括图
- IOS9网络请求报错:The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.
- 【Android】Log优雅的注释(github开源项目)
- you try to use the STM32 Library examples with IAR 6.30.6 you get a loot of error