有什么快速简便的方法来捕获屏幕的一部分吗? getPixel 很慢,而且 GetDIBits 作为开始似乎有点复杂
我尝试使用一些代码在 Windows 上使用 getPixel 捕获部分屏幕,设备上下文为空(捕获屏幕而不是窗口),但速度非常慢。 看起来 GetDIBits() 可以很快,但似乎有点复杂......我想知道是否有一个库可以将整个区域放入数组中,并且 Pixel[x][y] 将返回 24 位颜色像素的代码?
或者 Mac 上是否存在这样的库? 或者如果 Ruby 或 Python 已经有这样的库可以做到这一点?
I was trying some code to capture part of the screen using getPixel on Windows, with the device context being null (to capture screen instead of window), but it was really slow. It seems that GetDIBits() can be fast, but it seems a bit complcated... I wonder if there is a library that can put the whole region into an array, and pixel[x][y] will return the 24 bit color code of the pixel?
Or does such library exist on the Mac? Or if Ruby or Python already has such a library that can do that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我从未这样做过,但我会尝试:
创建内存设备上下文(DC)
使用 CreateCompatibleDC 传递它
桌面的设备上下文
(GetDC(NULL))。
创建位图(使用
创建兼容位图)相同
大小作为您捕获的区域。
选择位图到你的DC中
创建(使用 SelectObject)。
从以下位置执行 BitBlt
桌面 DC 到您创建的 DC(使用 SRCCOPY 标志)。
如果您以错误的顺序执行操作,则使用设备上下文可能会导致 GDI 泄漏,因此请确保阅读有关您使用的所有 GDI 函数(例如 SelectObject、GetDC 等)的文档。
I've never done this but I'd try to:
Create a memory Device Context (DC)
using CreateCompatibleDC passing it
the Device Context of the desktop
(GetDC(NULL)).
Create a Bitmap (using
CreateCompatibleBitmap) the same
size as the region your capturing.
Select the bitmap into the DC you
created (using SelectObject).
Do a BitBlt from the
desktop DC to the DC you created (using SRCCOPY flag).
Working with Device Contexts can cause GDI leaks if you do things in the wrong order so make sure that you read the documentation on all the GDI functions you use (e.g. SelectObject, GetDC, etc.).