2012-06-29 53 views
2

我有以下代碼:Perl的成像::截圖沒有做使用默認參數截圖

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

爲什麼你的第一個片段中'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。你得到一個undefined,因爲它正在做一個'return;'(沒有返回任何東西) – joslinm

2

我想這是導致問題的某行:

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

看到,隨着leftright PARAMS設置爲正值(即> 0),我們設置開始和結束'X'座標。但是,將「X」從窗口的最左邊緣開始比結束「X」沒有意義。同樣的故事與topbottom值相等。

如果你想要的是「讓我的窗口,是從左邊450個像素,並從右側200個像素,並且從頂部和底部邊緣50個像素的東西」,使用此:

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