在 C++ 中发送屏幕截图流

Posted

技术标签:

【中文标题】在 C++ 中发送屏幕截图流【英文标题】:Sending a stream of screen captures in C++ 【发布时间】:2016-03-07 07:53:33 【问题描述】:

我正在寻找一种以有效方式将屏幕截图转换为 char* 的方法。 我考虑过使用位图对象捕获屏幕,然后将位图对象转换为字节数组,然后转换为 char*,但我找不到任何方法将位图转换为字节数组。 我还考虑过迭代屏幕捕获中的每个像素并将 RGB 值保存在一个数组中,但这会创建一个对我来说太大的数组。

最终目标是以最快的方式返回一个 char* 对象,不会返回太大的对象,并且该 char* 包含捕获的屏幕数据。

【问题讨论】:

reinterpret_cast<char*>(pointer_to_raw_screenshot_data) 怎么样? "...我找不到将位图转换为字节数组的任何方法" - 你应该更努力地搜索一下,因为这几乎是位图的全部内容。跨度> 【参考方案1】:

您没有提供足够的信息/代码来理解您真正想要通过此实现的目标。例如。你打算如何表示颜色系数?无论如何,一种方法是使用 opencv 库,例如:

  cv::Mat mat = cv::imread("PATH/TO/YOUR/FILE.bmp");

  char table[mat.rows * mat.cols * 3]; // assuming that we have 3 colour channels
  unsigned int index = 0;

  cv::MatIterator_<uchar> it, end; 
  for( it = mat.begin<uchar>(), end = mat.end<uchar>(); it != end; ++it) 
    table[index++] = *it;

【讨论】:

以上是关于在 C++ 中发送屏幕截图流的主要内容,如果未能解决你的问题,请参考以下文章

使用 c++ 和 GDI 分析屏幕截图以获得屏幕的平均颜色

功能齐全的屏幕截图C++实现详解

功能齐全的屏幕截图C++实现详解

C++使用大漠插件及截图

如何使用 C++ 程序截取 FSX 的屏幕截图?

尝试制作一个屏幕截图按钮,当单击按钮时将屏幕截图发送到我的相机胶卷。斯威夫特 3,Xcode 8,IOS