0

私はJava 2Dグラフィックスを理解しようとしています

私は基本的に、次のように背景画像を含む JPanel を取得しました。

public MapFrame(Plotting pl){
    this.pl =pl;
    this.setPreferredSize(new Dimension(984,884));
    this.setBorder(BorderFactory.createEtchedBorder());
    try {
          getFileImage("stars.jpg");
        }
        catch (Exception ex) {

        }

    this.addMouseMotionListener(this);
    this.addMouseListener(this);
}

public void paintComponent(Graphics g) {
    super.paintComponent(g);    
    g.drawImage(bg, 0, 0, null);
    Graphics2D g2d = (Graphics2D) g;
            g2d.setColor(new Color(0x756b48));
            g2d.drawLine(0,0,0,100);
}

private void getFileImage(String filePath) throws InterruptedException, IOException {
        FileInputStream in = new FileInputStream(filePath);
        byte [] b=new byte[in.available()];
        in.read(b);
        in.close();
        bg=Toolkit.getDefaultToolkit().createImage(b);
        MediaTracker mt=new MediaTracker(this);
        mt.addImage(bg,0);
        mt.waitForAll();
     }

ペイント コンポーネントでは、いくつかの xml から取得したさまざまな xy ポイントでループ内の 12x12 ピクセルの小さな画像をオーバーレイしたいと考えています。

最初の画像にオーバーレイする画像を取得できないようです

私はここで少し迷っていて、錆びています

どんな助けでもgr8になります

4

4 に答える 4

0

おそらく、 ImageIOライブラリを使用して画像をロードすることをお勧めします。画像のファイル名がある場合、それをロードするために必要なのは

BufferedImage bimg = ImageIO.load(new File(filename));

これは、上記のコードよりも少し簡単です。

その後、他の人が言ったように、g.drawImage(bimg,x,y,this);実際に画像を描くためにを使用することができます。

于 2010-01-17T22:12:14.610 に答える
0

まあ

リソースのファイル名を間違ってフォーマットしました

私はなんてロバなのか

みんな良いアドバイスだと思います

于 2010-01-17T22:36:45.170 に答える
0
public void paintComponent(Graphics g) {
    g.drawImage(bg, 0, 0, null);
    Graphics2D g2d = (Graphics2D) g;
    g2d.setColor(new Color(0x756b48));
    g2d.drawLine(0,0,0,100);

    for(SomeXMLObject o : yourXMLSource) {
        g.drawImage(yourImage, o.x, o.y, null);
    }
}

XML の解析方法を明確に指定してください (既に行っている場合)。次に、「12x12」画像もロードする必要があります。XML から抽出された変数SomeXMLObjectを含む構造です。xy

背景の後に g.drawImage(...) を呼び出すと、背景の後に描画されるため、オーバーレイされます。必要に応じて、半透明領域を有効にするために、必ず png-24 画像をロードしてください。

于 2010-01-17T21:45:16.457 に答える
0

さまざまな場所に画像をペイントしたい場合はGraphics.drawImage(Image, int, int, ImageObserver)、異なる座標に対して複数回呼び出すだけです (前の回答で示したように)。

画像の読み込みに関しては、ImageIO.read自分で行うのではなく、いずれかの方法を使用することをお勧めします。

于 2010-01-17T21:52:41.833 に答える