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

leftおよびparamsをright正の値 (つまり > 0) に設定すると、開始および終了の「X-」座標が設定されます。しかし、開始 'X' が終了 'X' よりもウィンドウの左端から離れているのは意味がありません。同じ話は、top平等bottomにも当てはまります。

あなたが望むものが「左から 450 ピクセル、右から 200 ピクセル、上端と下端から 50 ピクセルのウィンドウの何かを取得する」ことである場合は、これを使用します。

my $img = screenshot(
  hwnd => 'active', 
  left => -200, 
  right => -450, 
  top => -50, 
  bottom => -50
);
于 2012-06-29T03:15:41.283 に答える