C ++ wxWidgets遍历桌面屏幕截图中的像素

Posted

技术标签:

【中文标题】C ++ wxWidgets遍历桌面屏幕截图中的像素【英文标题】:C++ wxWidgets Iterate through pixels in desktop screenshot 【发布时间】:2020-08-29 08:42:19 【问题描述】:

我是 C++ 新手,正在尝试截取桌面的屏幕截图并将其存储到文件中。然后我想打开图像并遍历图像中的每个像素并访问其 RGB 值。我在 Python 中很容易地完成了这项工作,因为我找到了一些易于使用的库来完成这项任务,但是在 C++ 中我遇到了麻烦。我正在构建一个 wxWidgets 项目,而且似乎 wxWidgets 可以方便地完成此任务。我已经用我在网上找到的一些代码记录了“截屏并保存到文件”:

wxScreenDC screen;

wxSize size = screen.GetSize();

wxBitmap bitmap(size.GetWidth(), size.GetHeight());

wxMemoryDC memory;

memory.SelectObject(bitmap);

memory.Blit(0, 0, size.GetWidth(), size.GetHeight(), &screen, 0, 0);

bitmap.SaveFile(wxT("screenshot.bmp"), wxBITMAP_TYPE_BMP);

这似乎很好。但我找不到任何关于如何遍历图像中像素的示例。我发现了一些可能有用的 wx 类,例如 wxPixelData,但没有关于如何访问现有图像中像素的示例。如果有人可以告诉我,将不胜感激。谢谢

【问题讨论】:

docs.wxwidgets.org/3.0/… 使用wxBitmap::ConvertToImage 获取wxImage,然后按照@macroland 的建议进行操作。 【参考方案1】:

如果你不关心性能(例如你只做一次),你确实应该将wxBitmap 转换为wxImage,然后使用这个类的方法来访问它的数据。如果您确实关心性能,则应该使用原始像素数据访问,虽然这不太方便(它的 API 较低级别以使其更快),当然,图像样本中有an example of doing this。

【讨论】:

我知道你不应该在 SO 上发布链接,但这对我帮助很大。 :)

以上是关于C ++ wxWidgets遍历桌面屏幕截图中的像素的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 DirectX 工具包中的屏幕抓图捕获桌面/屏幕截图?

C# 使用 SlimDX 获取窗口/桌面截图

如何截取完整桌面Windows c#的屏幕截图[关闭]

如何使用路径提供程序包将颤动屏幕截图保存到我的桌面

Objective C 中的部分屏幕截图

屏幕截图窗口窗体