微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有更快的替代GDI GetPixel?

我在.NET应用程序中使用gdi32.dll中的GetPixel()来对屏幕上任意位置的像素进行采样。 它工作正常,但它是我的主要性能瓶颈。

有没有更快的方法呢?

使用CreateDirectory时奇怪的exception消息

用C#和远程桌面问题捕获屏幕

在Ubuntu机器上通过jenkins代码发布.net MVC解决scheme

为什么在Windows中find打印机状态非常困难?

注册免费的COM DLL要求。NET框架3.5安装时,它在注册时工作正常

使用Bitmap LockBits()方法可以快速访问像素。 这会返回一个包含指向像素数据开始的指针的对象,您可以使用不安全的代码来访问内存。

http://www.bobpowell.net/lockingbits.htm

GetPixel由于两个原因而变慢:

由于您正在轮询屏幕 – 每次调用GetPixel导致视频驱动程序发生事务,而视频驱动程序又会从视频内存中获取像素数据。

相比之下,在DIB上使用GetPixel要快得多。

无论如何, GetPixel做了几件事,包括坐标剪切/转换等。

所以,如果你用来一次查询许多像素值 – 你应该尝试安排在一个单一的交易到GDI /视频驱动程序。

使用GDI你应该创建一个适当大小的DIB(参见CreateDIBSection )。 创建之后,您将获得一个直接指向图像位数据的指针。 然后将图像部分复制到您的DIB(请参阅BitBlt )。 在实际检查DIB的内容之前,不要忘记调用GdiFlush (因为视频驱动程序可能会执行异步绘图)。

使用GD +你可能会用相同的语法做一些简单的操作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐