2011-04-11 93 views
0

我有一個可滾動的畫布,他的內容我想成爲一個PNG圖像。如何將整個可滾動畫布保存爲PNG?

問題是我只得到一張畫布的照片,在給定的時間缺少畫布的不可見部分。

如何將整個可滾動畫布變成png圖像?

我當前的代碼如下:

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

您能否創建示例圖像(您得到了什麼以及您需要什麼)?當然,最後一個是蒙太奇。 – 2011-04-11 19:31:19

+0

它只是一個可以滾動的畫布,這意味着一次只能看到其中的一部分。當我打印畫布時,我只看到可見部分,而不是隱藏的部分,因爲用戶沒有滾動查看它。 – 2011-04-12 13:32:12

回答

1

沒有做一個本地的方式; Tk只能繪製到窗口,而不是基於圖像的曲面。因此,您的選擇是要麼:

  1. 滾動的帆布,拍攝快照,然後將它們拼合在一起
  2. 生成封裝的PostScript(其中確實支持將會在整個畫布上,只要你使用正確的選項)並用像ghostscript這樣的工具來生成你的圖片。
+0

第二個是我做的。 – 2011-04-12 16:00:44

1

這是一個一段時間,因爲我沒有任何重Tk工作,所以這可能無法正常工作。您是否嘗試過尋找滾動畫布的非滾動子組件?

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

不起作用,它仍然只是打印畫布的可見部分。 – 2011-04-12 12:42:30