CImage类的使用
来源:互联网 发布:孙尚娴雅网络直播 编辑:程序博客网 时间:2024/04/29 05:25
今天开始写积攒自己的编程心得。一点一点积累吧!希望有一天翻开的时候,发现自己进步的痕迹。
1.在CImage类中,对像素访问最方便的是用GetPixel,MSDN中给出的例子simpleImage的代码如下: COLORREF pixel; for (int y=0; y<maxY; y++) { }} 发现执行速度特别慢。因为每次调用getpixel,都包含着程序的进栈和出栈。 所以,面对大量需要处理的数据,采用直接访问内存地址的方法。 byte* pRealData; int pit=imgOriginal.GetPitch(); int bitCount=imgOriginal.GetBPP()/8; for (int y=0; y<maxY; y++) { int grayVal=(int)(int)(*(pRealData + pit*y + x*bitCount))*0.3 *(pRealData + pit*y + x*bitCount)=grayVal; //如果是8位灰度图像,直接读取一个BYTE位为灰度值 //如果是24位RGB图像,则依次读取pixAddr,pixAddr+1,pixAddr+2为B、G、R分量值 }} 用两种方法对同一张图片(3264*2448像素)进行处理,前者需要1分钟,后者只需1秒左右。 所以,后者比前者至少快60倍。 2. 如果处理比较复杂的话,可把所有点颜色全部读到一个二维数组里面,然后对这个数组进行读写和处理。 再把处理后的图像显示出来。这样速度才会快!
int maxY = imgOriginal.GetHeight(), maxX = imgOriginal.GetWidth();
byte r,g,b,avg;
for (int x=0; x<maxX; x++) {
pixel = imgOriginal.GetPixel(x,y);
r = GetRValue(pixel);
g = GetGValue(pixel);
b = GetBValue(pixel);
avg = (r+ g+ b)/3;
imgOriginal.SetPixelRGB(x,y,avg,avg,avg);
pRealData=(byte*)imgOriginal.GetBits();
for (int x=0; x<maxX; x++) {
+
(int)(int)(*(pRealData + pit*y + x*bitCount +1))*0.59
+
(int)(int)(*(pRealData + pit*y + x*bitCount +2))*0.11;
*(pRealData + pit*y + x*bitCount +1)=grayVal;
*(pRealData + pit*y + x*bitCount +2)=grayVal;
- CImage类的使用
- CImage类的使用
- CImage类的使用
- CImage类的使用介绍!
- CImage类的介绍与使用
- CImage类的介绍与使用
- CImage类的介绍与使用
- CImage类的介绍与使用
- CImage类的介绍和使用
- CImage类的介绍与使用
- CImage类的介绍与使用
- CImage类的介绍与使用
- CImage类的介绍与使用
- CImage类的介绍与使用
- CImage类的介绍与使用
- CImage类的介绍与使用
- CImage类的简介与使用
- Cimage类的介绍及使用
- Oralce的数据类型
- STL 中 map 用法详解
- asp.net中如何遍历HashTable
- sdfsafsffsdf
- SOHO-WORK招聘
- CImage类的使用
- B树
- c#调用itextsharp进行Pdf报表设计
- 非关系数据库简单尝试
- MVC之分页(三)
- 解决PLSQL的问题
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第七节 获取本机网间控制报文协议(ICMP)信息
- ssh验证问题
- float属性