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

一、在图片处理时,如果每次都是对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进行操作

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值