捕获 wxFrame 内容并保存到文件
Capture wxFrame contents and save to file
我正在使用以下核心来捕获我的 MainWin 的内容,它是一个 wxFrame:
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 之前我必须刷新一些东西吗?或者还有什么原因?
谢谢!
我试过你的代码,我也 运行 进入 st运行ge 结果:一个简单的框架,上面有一个面板、一个按钮和一个文本框,结果是所有背景(面板、文本框)都是 t运行sparents,按钮的文本做同样的事情。
似乎 png 处理程序对此负责:我尝试保存到 jpeg 文件,一切正常。
您应该尝试使用 jpeg 看看您的工具栏图像是否有同样的问题。
问候
Xav'
我正在使用以下核心来捕获我的 MainWin 的内容,它是一个 wxFrame:
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 之前我必须刷新一些东西吗?或者还有什么原因?
谢谢!
我试过你的代码,我也 运行 进入 st运行ge 结果:一个简单的框架,上面有一个面板、一个按钮和一个文本框,结果是所有背景(面板、文本框)都是 t运行sparents,按钮的文本做同样的事情。
似乎 png 处理程序对此负责:我尝试保存到 jpeg 文件,一切正常。
您应该尝试使用 jpeg 看看您的工具栏图像是否有同样的问题。
问候 Xav'