2

我有以下代码:

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";

它确实需要一个屏幕截图。为什么左边、右边、顶部和底部的值在这里很重要?

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

4

2 回答 2

2

您是否尝试过检查错误?例如

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";
于 2012-06-29T02:55:00.790 回答
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
);
于 2012-06-29T03:15:41.283 回答