首页 > 解决方案 > 捕获 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 之前刷新一些东西吗?或者还有什么可能的原因?

谢谢!

标签: imagescreenshotwxwidgetscapturescreen-capture

解决方案


我试过你的代码,我也遇到了奇怪的结果:一个简单的框架,上面有一个面板、一个按钮和一个文本框,结果是所有背景(面板、文本框)都是透明的,而文本按钮做同样的事情。

似乎 png 处理程序对此负责:我尝试保存到 jpeg 文件,一切正常。

您应该尝试使用 jpeg 来查看您的工具栏图像是否存在相同的问题。

问候 Xav'


推荐阅读