【问题标题】:How to save entire scrollable canvas as PNG?如何将整个可滚动画布保存为 PNG?
【发布时间】:2011-08-03 06:53:32
【问题描述】:

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

【问题讨论】:

  • 你能创建示例图像(你得到什么和你需要什么)吗?当然,最后一个是蒙太奇。
  • 它只是一个可以滚动的画布,这意味着一次只能看到其中的一部分。当我打印画布时,我只看到可见部分,而不是因为用户没有滚动查看而隐藏的部分。

标签: perl image canvas png tk


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我已经有一段时间没有做任何繁重的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' );
    

    【讨论】:

    • 不起作用,它仍然只是打印画布的可见部分。
    猜你喜欢
    • 2010-10-04
    • 2016-02-17
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    相关资源
    最近更新 更多