Perl Imager ::屏幕截图没有使用默认参数进行屏幕截图

时间:2012-06-29 02:50:40

标签: perl screenshot

我有以下代码:

use Imager::Screenshot 'screenshot';
my $img = screenshot(hwnd => 'active', 
    left => 450, 
    right => 200, 
    top => 50, 
    bottom => 50
);
$img->write(file => 'screenshot.png', type => 'png' ) || 
    print "Failed: ", $img->{ERRSTR} , "\n";

打印:

  

“无法调用方法”写入“第3行未定义的值”

但是当我这样做时:

use Imager::Screenshot 'screenshot';
my $img = screenshot(hwnd => 'active', 
    left => 100, 
     right => 300, 
     top => 100, 
     bottom => 300
);

$img->write(file => 'screenshot.png', type => 'png' ) || 
     print "Failed: ", $img->{ERRSTR} , "\n";

它确实需要截图。为什么左,右,顶部和底部值在这里很重要?

编辑: 经过一些研究后,我发现左侧参数必须小于右侧参数,顶部必须小于底部。

2 个答案:

答案 0 :(得分:2)

您是否尝试过检查错误? e.g。

my $img = screenshot(...) or die Imager->errstr;

编辑:试试这段代码:

use Imager::Screenshot 'screenshot';
my $img = screenshot(hwnd => 'active',
    left => 450, 
    right => 200, 
    top => 50, 
    bottom => 50
) or die Imager->errstr;
$img->write(file => 'screenshot.png', type => 'png' ) || 
    print "Failed: ", $img->errstr, "\n";

答案 1 :(得分:2)

我认为这是导致问题的因素:

my $img = screenshot(
  hwnd => 'active', 
  left => 450, 
  right => 200, 
  top => 50, 
  bottom => 50
);

请参阅leftright参数设置为正值(即> 0),我们设置开始和结束'X-'坐标。但是,将“X”从窗口的最左边开始比结束“X”更有意义。同样的故事与topbottom值相等。

如果您想要的是'让我看到左侧450像素,右侧200像素,顶部和底部边缘50像素'的窗口,请使用:

my $img = screenshot(
  hwnd => 'active', 
  left => -200, 
  right => -450, 
  top => -50, 
  bottom => -50
);