2012-06-29 4 views
2

У меня есть следующий код:Perl Imager :: Скриншот не делает скриншот с параметрами по умолчанию

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

Выполняется скриншот. Почему здесь нужны левые, правые, верхние и нижние значения?

EDIT: После некоторых исследований выяснилось, что левый параметр должен быть меньше, чем правая пара, а верхняя часть должна быть меньше нижней.

+2

Почему значение параметра 'left' выше значения параметра' right' в вашем первом фрагменте? Что вы пытаетесь получить? – raina77ow

ответ

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

Я не уверен, понимаю ли вы вас. Извините – Grigor

+0

@Grigor Я отредактировал свой ответ. Попробуйте этот код. – njahnke

+0

Также, вот источник: https://github.com/tonycoz/imager-screenshot/blob/master/Screenshot.pm#L100. Вы получаете неопределенное, потому что он делает «return;» (ничего не возвращает) – joslinm

2

Я полагаю, что это линия, которая вызывает проблемы:

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

видеть, с left и right Params набор положительных значений (т.е.> 0), мы устанавливаем начальные и конечные координаты «X-». Но это не имеет смысла для того, чтобы начать «X» дальше от самого левого края окна, чем заканчивать «X». Та же история идет с top и bottom означает равенство.

Если то, что вы хотите «получить мне что-то из этого окна, что это 450 пикселей с левой стороны, и 200 пикселей с правой стороны и 50 пикселей от верхней и нижней кромкам», используйте:

my $img = screenshot(
    hwnd => 'active', 
    left => -200, 
    right => -450, 
    top => -50, 
    bottom => -50 
); 
Смежные вопросы