2011-04-11 6 views
0

나는 스크롤 할 수있는 캔버스를 가지고 있는데, 그 내용은 내가 원하는 PNG 이미지이다.전체 스크롤 가능한 캔버스를 PNG로 저장하는 방법은 무엇입니까?

문제는 주어진 시간에 캔버스의 보이지 않는 부분이 누락 된 캔버스의 사진 만 얻는 것입니다.

어떻게 전체 스크롤 가능한 캔버스를 PNG 이미지로 가져 옵니까?

내 현재 코드는 다음과 같습니다 : 나는 무거운 Tk 작업을 한 이후

my $canvas_to_get_photo=$mw->Photo(-format=>'Window', -data=>oct($canvas_to_get->id)); 
$canvas_to_get_photo->write('somepath/image.png', -format=>'png'); 
+0

예제 이미지 (원하는 이미지와 필요한 이미지)를 만들 수 있습니까? 물론 몽타주 라구요. –

+0

스크롤 할 수있는 캔버스로, 한 번에 일부만 표시됩니다. 캔버스를 인쇄 할 때 볼 수있는 부분 만 볼 수 있습니다. 사용자가보기 위해 스크롤하지 않았기 때문에 숨겨진 부분이 아닙니다. –

답변

1

원하는 것을 할 수있다; Tk는 이미지 기반 표면이 아닌 창에만 페인트합니다.

  1. 스크롤 스냅 샷을 캔버스, 다음 (오른쪽 옵션을 사용하여 제공 전체 캔버스를 통해가는를 지원 하는가하는) 캡슐화 된 포스트 스크립트를 생성 함께
  2. 을 스티치 : 귀하의 옵션에 하나 그러므로 있습니다 고스트 스크립트 (ghostscript)와 같은 도구를 사용하여 이미지를 생성하십시오.
+0

두 번째는 내가 한 일입니다. –

1

그것은 잠시 있었다, 그래서이 작동하지 않을 수 있습니다. 스크롤 된 캔버스의 스크롤되지 않은 하위 구성 요소를 찾으려고 했습니까?

IIRC의 '스크롤 된'위젯은 실제로 스크롤바, 모서리 항목 및 스크롤 된 항목 하위 위젯이있는 "메가 위젯"입니다.

그래서, 당신이 그것을 할 수있는 기본 방법이 없다

my $canvas = $scrolled->Subwidget('widget'); 
$canvas = $scrolled unless $canvas; 
my $canvas_id = $canvas->id; 

my $photo = $mw->Photo(-format => 'Window', -data => oct $canvas_id); 
$photo->write('somepath/image.png', -format => 'png'); 
+0

이 작동하지 않아도 캔버스의 보이는 부분 만 인쇄합니다. –

관련 문제