我有以下代码:
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";
它确实需要截图。为什么左,右,顶部和底部值在这里很重要?
编辑: 经过一些研究后,我发现左侧参数必须小于右侧参数,顶部必须小于底部。
答案 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
);
请参阅left
和right
参数设置为正值(即> 0),我们设置开始和结束'X-'坐标。但是,将“X”从窗口的最左边开始比结束“X”更有意义。同样的故事与top
和bottom
值相等。
如果您想要的是'让我看到左侧450像素,右侧200像素,顶部和底部边缘50像素'的窗口,请使用:
my $img = screenshot(
hwnd => 'active',
left => -200,
right => -450,
top => -50,
bottom => -50
);