Захват содержимого wxFrame и сохранение в файл - PullRequest
0 голосов
/ 28 сентября 2018

Я использую следующее ядро ​​для захвата содержимого моего 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);
}

В принципе, это работает, но сохраняет только части моего всего экрана (например, с панели инструментов только сначаласохранены три изображения, все остальные отсутствуют), недостающие части просто черные.

Что я здесь не так делаю?Должен ли я что-то освежить перед блиттингом?Или в чем еще может быть причина?

Спасибо!

1 Ответ

0 голосов
/ 28 сентября 2018

Я попробовал ваш код, и я также столкнулся со странным результатом: простая рамка с панелью, кнопкой и текстовым полем на ней, и в результате все фоны (панель, текстовое поле) являются прозрачными, итекст кнопки делает то же самое.

Кажется, что за это отвечает обработчик png: я попытался сохранить файл в формате jpeg и все прошло нормально.

Вы должны попробовать использоватьjpeg, чтобы узнать, есть ли у вас такая же проблема с изображениями на панели инструментов.

С уважением, Xav '

...