2016-06-13 25 views
0

こんにちは、奇妙な行動:getSubimage()関数が

私は私のJPanelのスクリーンショットを作成するには、次のコードを実行しています。

private void makePanelImage(Component panel, String saveAs) { 
    Dimension size = panel.getSize(); 
    BufferedImage image = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB); 

    // CROP 
    // BufferedImage cropped = image.getSubimage(9, 31, 2459, 3467); 
    BufferedImage cropped = image.getSubimage(1800, 2000, 500, 700); 

    Graphics2D g2 = cropped.createGraphics(); 
    panel.paint(g2); 
    saveAs = saveAs + ".png"; 
    try { 
     ImageIO.write(cropped, "png", new File(saveAs)); 
     System.out.println("Image Saved: " + saveAs); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

問題の一部は次のとおりです。どんなに私はXとYを設定したもの

BufferedImage cropped = image.getSubimage(1800, 2000, 500, 700); 

- 無視されて、それは常に取られます。それは0と0のようになります。そして私はなぜそれが分かりませんか?誰かがこれまでに遭遇したことはありますか? 2番目の部分 - 幅と高さは画像に影響を与えます。私はそれをできるだけ小さくすることができます - それはいいです。しかし、ラスタWONTの左上の「開始」が移動します。

これはバグですか?

注:私は+ WIDTHを相殺するためにそれを設定した瞬間、しかし面白いとは何ですか> ORIGINAL私はエラーを取得 - 論理的であるが、まだそれは文句を言わない得る

を「移動」私はここで何かをしないのですしてください?

+1

を試すことができますか?新しい「BufferedImage」を作成してから、それの副画像を作成することができます。[mcve]を提供する場合は、手助けする方が簡単でしょう。 –

+0

こんにちはジョン、あなたの返事をありがとう。私は本当にあなたが人口を意味するものを理解していない。考え方は、このメソッドはJPanelに適用可能であり、送信されたファイル名をJPanelに送信する必要があるということです。私はそれがもっと最小限になるとは思わない? –

+0

それを実行するとうまくいきます... –

答えて

1

あなたが実際に画像を移入され、この

BufferedImage image = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_RGB); 
Graphics2D g2 = image.createGraphics(); 
panel.paint(g2); 
BufferedImage cropped = image.getSubimage(1800, 2000, 500, 700); 
+0

ああ、ありがとうございました!しかし、まあまあ、私はJAVAの達人ではありませんか?私は私が "作物私はそれを描いた後に何をしているのか分かりません。 –