Как я могу скопировать содержимое одного окна в другое, используя Xlib? - PullRequest
3 голосов
/ 11 февраля 2011

Я хочу скопировать содержимое существующего окна в свое собственное окно, используя Xlib.Я пробовал XCopyArea, и он отказывается копировать между двумя Windows.Я также попробовал XGetImage и XPutImage, и он также не работает.

Какой лучший способ скопировать графическое содержимое окна в мое собственное?

Часть II:
На основе информации нижеЯ смог заставить XCopyArea и XGetImage работать.Причина, по которой он не работал, была разница в глубине окна источника и назначения.Я был удивлен, узнав, что на моем рабочем столе разные глубины.

Но у меня все еще ограниченный успех с XCopyArea.Если я начну копировать из top из определенных Windows, как Google Chrome, он не будет копировать всю область, только строку заголовка.XGetImage отлично работает в этих случаях.Любая подсказка, почему XCopyArea не будет копировать за пределы строки заголовка некоторые Windows?

1 Ответ

4 голосов
/ 11 февраля 2011

XCopyArea должно быть в порядке.Обратите внимание, что это будет только копировать на передний план места назначения - может быть, оно рисуется, а затем стирается?

Без кода я могу предположить:

Если это не удалось, вы проверили, что окна определенно имеют одинаковый корень и глубину?Также убедитесь, что вы просматриваете систему координат X Window.Возможно, попробуйте скопировать так, чтобы угол вашей копии находился в центре пункта назначения, чтобы увидеть, можете ли вы получить что-либо.

Обычно вы хотите какой-то способ обработки событий Expose в окне назначения, чтобы вы могли обновить.

Я бы порекомендовал создать Pixmap в качестве промежуточного звена.Pixmap и Window могут быть нарисованы.Используйте XCopyArea для копирования в Pixmap.Затем используйте XSetWindowBackgroundPixmap для фактической визуализации изображения.Установка фона означает, что вы можете игнорировать необходимость обработки событий Expose для перерисовки изображения.

...