0

誰でもこれを説明できますか? Image オブジェクトを作成するには 3 つの方法がありますが、getscalledinstance() を使用して最後のオブジェクト (k) のみを正常にスケーリングできます。

public class scalingTest extends JPanel {

    public static Image i;
    public static Image j;
    public static Image k;
    scalingTest() throws IOException
    {
        i = Toolkit.getDefaultToolkit().getImage("C:/Users/Prashant/Desktop/2.png");
        j = new ImageIcon("C:/Users/Prashant/Desktop/2.png").getImage();
        k = ImageIO.read(new File("C:/Users/Prashant/Desktop/2.png"));
    }
    public static void main(String s[]) throws IOException
    {
        JFrame jf = new JFrame("Scaling TEST");
        jf.add(new scalingTest());
        jf.setSize(500, 500);
        jf.setVisible(true);
    }
    @Override
    public void paintComponent(Graphics g)
    {
        g.drawImage(i.getScaledInstance(100, 100, Image.SCALE_DEFAULT), 0, 0, this);
        g.drawImage(j.getScaledInstance(100, 100, Image.SCALE_DEFAULT), 100, 100, this);
        g.drawImage(k.getScaledInstance(100, 100, Image.SCALE_DEFAULT), 200, 200, this);
    }
}
4

1 に答える 1

0

Image.getScaledInstanceのJavadocを読んでください。

指定さ れたデフォルトで画像をレンダリングする新しいImageオブジェクトが返されます。元のソースイメージがすでに完全にロードされている場合でも、新しいオブジェクトは非同期でロードされる場合があります。widthheightImage

拡大縮小した画像を描画するときは、実際にそこにあることを確認してください(その方法についてアドバイスが必要な場合は、「画像が完全に読み込まれていることを確認してください」を探してください)。ImageIOを介して取得された画像で機能する理由は、ImageIOがBufferedImageを提供し、それが常に読み込まれるためです。

注:画像を画像サイズ以外のサイズに単純に描画するために、スケーリングされたインスタンスを作成する必要はありません。グラフィックには、その場で異なるサイズの画像を描画するメソッドがあります。ユースケースによっては、それを使用したほうがよい場合があります。

于 2012-07-25T16:34:11.193 に答える