1

それで、私はしばらく Minecraft を改造しており、ボタンがどのように生成されるかを見てきました。ボタンの非常に広い画像を取り、左側の部分と右側の部分を取り、2 つを元に戻して小さな画像を形成します。

申し訳ありませんが、これを言葉でうまく説明できないので、下手な Paint.Net スキルをお見せしましょう。

説明

ただし、次のようになるため、機能させることができません。 消す

ここに私のコードの一部があります:

public class ComponentToolbarButton extends JComponent implements MouseListener {

    private static final int HEIGHT = 40;

    // ... other methods here

    private BufferedImage getImageBasedOnWidth(Graphics g) {
        BufferedImage finalImage = null;
        BufferedImage rawImage = null;


         // Try/catch block to initialize rawImage

         // Setting font and things here        

        int compWidth = determineComponentWidth(g); // Returns the (should-be) width of the component

        if (compWidth != getWidth()) { 
            setPreferredSize(new Dimension(compWidth, HEIGHT)); // Just making sure :)
        }

        finalImage = new BufferedImage(compWidth, HEIGHT, BufferedImage.TYPE_INT_RGB);
        Graphics finalImageGraphics = finalImage.getGraphics();


        // Draw left side:
        finalImageGraphics.drawImage(rawImage, 0, 0, 0, compWidth / 2, 0, 0, compWidth, HEIGHT, null);

        // Draw right side:
        finalImageGraphics.drawImage(rawImage, compWidth / 2, 0, compWidth, HEIGHT, rawImage.getWidth() / 2 - compWidth,
            0, rawImage.getWidth(), rawImage.getHeight(), null);


        return finalImage;
    }
}

前もって感謝します!(ところで、できる限りコードを短くしようとしました)

4

2 に答える 2

1

の呼び出しで座標が混同されている可能性がありますdrawImage

boolean Graphics.drawImage(Image img,
       int dstx1, int dsty1, int dstx2, int dsty2,
       int srcx1, int srcy1, int srcx2, int srcy2,
       ImageObserver observer);

幅と高さの寸法は、次の式に従って計算されます(dstx2-dstx1), (dsty2-dsty1)

左側でこれを試してください:

finalImageGraphics.drawImage(rawImage, 
        0, 0, compWidth / 2, HEIGHT, 
        0, 0, rawImage.getWidth() / 2, rawImage.getHeight(),
        null);

Drawing an Imageは、主題に関する優れたチュートリアルです。

于 2012-08-04T21:29:17.343 に答える