Bitmap图片处理的效率----BitmapData

来源:互联网 发布:python与matlab 编辑:程序博客网 时间:2024/05/01 06:54

一、在图片处理时,如果每次都是对Bitmap的对象进行直接处理,效率不高。

二、改进: 在每次处理图像之前,对其进行lock,生成对应的BitmapData对象。 

( 注: 

            BitmapData类是将Bitmap里面的像素映射成为一个一位数组,Bitmap中一个像素为4bytes,分别对应为ARGB,而BitmapData中4bytes中颜色的排列顺序为BGRA,BitmapData属性如下:

              ①、Scan0 是该一维数组对应的首地址,采用BYTE* m_p=(BYTE*)srcBitmapData.Scan0;就可以按颜色对一维数组中的像素进行访问。例如:*m_p为蓝色,*(m_p+1)为绿色 ;

             ②、srcBitmapData.Width, srcBitmapData.Height, 分别为原来二维数组中的宽、高;

             ③、srcBitmapData.Stride为一行的字节数,且为4的整数倍,如果不足末尾会不成4的倍数。故对Bitmap中的[i][j]处的蓝色可以这样访问(j*srcBitmapData.Stride)+4*i; )

三、内存释放问题: 在函数结束前要对产生的Bitmap(包括clone的)进行delete

             例如: if (image) { delete image; image=NULL; } 

四、附:

             Rect rc(0, 0, m_pOrignImage->GetWidth(), m_pOrignImage->GetHeight());

             BitmapData srcBitmapData;m_pOrignImage->LockBits(&rc, Gdiplus::ImageLockModeRead | Gdiplus::ImageLockModeWrite, PixelFormat32bppARGB, &srcBitmapData);//锁定图像

            m_pOrignImage->UnlockBits(&srcBitmapData);//记得释放图像,只有释放了才能对m_pOrignImage进行操作

1 0
原创粉丝点击