image - 捕获 wxFrame 内容并保存到文件
问题描述
我正在使用以下核心来捕获作为 wxFrame 的 MainWin 的内容:
void MainWin::capture(wxString path)
{
wxClientDC dcWindow(this);
wxCoord screenWidth, screenHeight;
dcWindow.GetSize(&screenWidth, &screenHeight);
wxBitmap screenshot(screenWidth, screenHeight, -1);
wxMemoryDC memDC;
memDC.SelectObject(screenshot);
memDC.Clear();
memDC.Blit(0,0, //Copy to coordinate
screenWidth,screenHeight,
&dcWindow,
0,0 //offset in the original DC
);
memDC.SelectObject(wxNullBitmap);
screenshot.SaveFile(path, wxBITMAP_TYPE_PNG);
}
原则上它可以工作,但它只保存了我整个屏幕的一部分(例如,从工具栏中只保存了前三个图像,所有其他图像都丢失了),丢失的部分只是黑色的。
我在这里做错了什么?我必须在 blitting 之前刷新一些东西吗?或者还有什么可能的原因?
谢谢!
解决方案
我试过你的代码,我也遇到了奇怪的结果:一个简单的框架,上面有一个面板、一个按钮和一个文本框,结果是所有背景(面板、文本框)都是透明的,而文本按钮做同样的事情。
似乎 png 处理程序对此负责:我尝试保存到 jpeg 文件,一切正常。
您应该尝试使用 jpeg 来查看您的工具栏图像是否存在相同的问题。
问候 Xav'
推荐阅读
- javascript - 是否可以通过按类名定位列表容器来附加列表项?
- angular - 如何在打字稿中将日期转换为字符串格式 yyyy-mm-dd
- html - 通过处理子容器的动态添加,使用 Flexbox 以相同的空间垂直拉伸多个子容器
- wordpress - 为什么我的 Gutenberg Instagram 在编辑器中工作时不能在前端嵌入块工作?
- android - 在 mysql 数据库的弹出窗口中显示值
- html - 如何在由一个组件创建的材料卡之间进行交换?
- node.js - 如何扫描所有文件或某些文本并将其复制到另一个文件?
- android - setBackground 到表格中的按钮
- java - 如何使用 SpEL 提取列表中对象的单个属性列表?
- python - Python Pandas:拆分和更改日期格式(一个带有例如:(2018 年 8 月 - 2018 年 11 月))和其他只有一个?