2011-02-11 5 views
2

Xlib을 사용하여 기존 Window의 내용을 내 자신의 Window로 복사하려고합니다. XCopyArea 시도하고 두 Windows간에 복사를 거부합니다. 나는 또한 XGetImage와 XPutImage를 시도했으며 실패했다.Xlib을 사용하여 한 창의 내용을 다른 창으로 복사하는 방법은 무엇입니까?

Window의 그래픽 내용을 내 자신에게 복사하는 가장 좋은 방법은 무엇입니까?

파트 II :
아래 정보를 바탕으로 XCopyArea 및 XGetImage를 사용할 수있었습니다. 작동하지 않는 이유는 출발지와 도착지의 깊이가 다른 점이었습니다. 다른 Windows가 바탕 화면에서 다른 깊이를 가지고 있음을 알면 놀랐습니다.

그러나 XCopyArea로는 여전히 제한적인 성공을 거두었습니다. Google 크롬과 같은 Windows에서 복사를 시작하면 전체 영역 (제목 표시 줄 만)이 복사되지 않습니다. 이러한 경우 XGetImage가 정상적으로 작동합니다. XCopyArea가 Windows의 제목 표시 줄을 넘어서 복사되지 않는 이유에 대한 단서?

답변

3

XCopyArea이어야합니다. 이것은 목적지의 전경에만 복사 할 것입니다 - 어쩌면 그려진 후 지워졌을 것입니까?

코드없이 내가 추측 할 수 있습니다

을가 실패하는 경우 Windows 확실히 동일한 루트와 깊이를 가지고 있음을 확인했다? 또한 X Window 좌표계를 검토하십시오. 어쩌면 복사본의 모서리가 목적지의 중심에 있도록 복사를 시도하여 아무 것도 얻을 수 있는지 확인하십시오.

일반적으로 새로 고침 작업을 수행 할 수 있도록 대상 창에서 노출 이벤트를 처리하는 방법이 필요합니다.

중간급으로 Pixmap을 만드는 것이 좋습니다. Pixmap과 Window 모두 Drawable입니다. XCopyArea를 사용하여 Pixmap에 복사하십시오. 그런 다음 실제로 이미지를 렌더링하려면 XSetWindowBackgroundPixmap을 사용하십시오. 배경 설정은 이미지를 다시 그리기 위해 Expose 이벤트를 처리 할 필요성을 무시할 수 있음을 의미합니다.

+1

혼란을주는 또 다른 방법은 가려진/매핑되지 않은 소스 창에 의미있는 내용이 포함될 것으로 기대하는 것입니다. (slowpoison, "실패"- X 오류는 무엇을 의미합니까? –

관련 문제