Сохранение wxPanel в изображение

Я ищу способ по существу захватить весь экран wxPanel и сохранить его как PNG. Фишка в том, что нет экрана. Мне нужно иметь возможность «рисовать» панель и сохранять нарисованную панель без фактического экрана. Я использую Python 2.7, работающий на Ubuntu 12.04.

Это возможно?


person Zobal    schedule 09.07.2013    source источник


Ответы (3)


Если экрана вообще нет, то есть нет дисплея X11, то вы не сможете даже запустить графическую программу wxWidgets, поэтому я не уверен, как именно вы хотите, чтобы это работало.

Если вы можете запустить программу, вы также можете использовать wxClientDC для захвата содержимого любого window: используйте его метод Blit(), чтобы скопировать его содержимое в wxMemoryDC, в котором вы выберете растровое изображение, которое закончится изображением вашего окна.

person VZ.    schedule 10.07.2013
comment
Я пробую это с экраном, чтобы заставить работать захват изображения. Вот что у меня есть в инициализации панели: sizer = wx.BoxSizer(wx.VERTICAL) text = wx.StaticText(self, -1, "Heeeeeeerrreeeeee's a Panel!") sizer.Add(text, 1, wx.EXPAND | wx.ALL, 10) self.SetSizer(sizer) bitMap = wx.EmptyBitmap(500,500) memDCwx.MemoryDC(bitMap) clientDC = wx.ClientDC(self) clientDC.Blit(0,0,500,500,memDC,0,0) bitMap.SaveFile(fileName, wx.BITMAP_TYPE_PNG) Мое изображение заканчивается черным ящиком 500 X 500. - person Zobal; 10.07.2013

Я написал учебник о том, как сделать такие вещи здесь:

Однако, как уже указывалось, если X (или аналогичный) недоступен, вы не сможете создать какой-либо графический интерфейс. Или, возможно, вы имели в виду коробку без головы (то есть без монитора), а не без экрана?

person Mike Driscoll    schedule 10.07.2013
comment
Он работает на UBUNTU 12.04 с GRUB_CMDLINE_LINUX_DEFAULT, установленным в текст, что, как я полагаю, означает, что X не работает. Мы успешно делаем подобные вещи с floatCanvas, который основан на wx, так что я надеюсь, что это сработает. Спасибо за ссылку, это именно то, что я искал! - person Zobal; 10.07.2013
comment
@ВЗ. Вы, ребята, правы. Это невозможно без запуска X. Метод floatCanvas заключается в том, чтобы отрисовывать каждый пиксель в memoryDC, а затем передавать его в clientDC после завершения рисования. Таким образом, не имеет значения, есть экран или нет. Тем не менее, wxApp запускается, а фреймы и панели создаются, несмотря на отсутствие запущенного X. Интересно. Спасибо, что нашли время, чтобы помочь. - person Zobal; 11.07.2013

Я нашел трюк, и вот, его имя VFB: http://linux.die.net/man/1/xvfb

person Zobal    schedule 26.07.2013