C#QQ找茬助手(二)GetPiexl与SetPixel优化

本文介绍了如何通过Marshal类和指针操作优化C#中Bitmap的GetPixel和SetPixel方法,提高图像处理速度。通过BitmapData和unsafe代码,实现对大量像素的快速访问,同时给出了性能对比和注意事项。
摘要由CSDN通过智能技术生成

接上一篇内容,首先是对像素处理的优化,我们知道Bitmap中提供了GetPixelSetPixel方法可以访问Bitmap类中的某个位图像素数据,但是效率相当低下。用过OpenCV或者EmguCV的人知道它们使用的是自己的数据结构cvImage。不是每个人都有OpenCV的环境,其实微软中的GDI+BitmapData)也提供了可以用于高速访问内存中Bitmap的单个位图数据的方法。在C#下,有两种可选的方式使用BitmapData类型:Marshal类和指针。

Marshal

Marshal支持从托管内存空间复制数据到非托管内存空间,或是反之。起到托管和非托管编程模型之间的桥梁作用。

指针

C#中保留了指针和指针运算,但是必须在不安全代码中使用。默认下不支持,需要程序员自己通过unsafe来定义不安全上下文。虽然是不安全代码但是并不意味着是不安全的,不安全代码省略了托管内存与非托管内存交换过程,性能更优。但是操作不慎会引起内存泄露,因此使用务必小心。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值