如何将整个可滚动画布保存为PNG?

时间:2011-04-11 18:05:10

标签: perl image canvas png tk

我有一个可滚动的画布,我想要的内容为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');

2 个答案:

答案 0 :(得分: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' );

答案 1 :(得分:1)

没有本地方式可以做到; Tk只绘制到窗口,而不是基于图像的表面。因此,您可以选择:

  1. 滚动画布,拍摄快照,然后将它们拼接在一起
  2. 生成封装的postscript( 支持遍历整个画布,只要您使用正确的选项)并使用ghostscript等工具生成图像。