2

画像を反転する必要があるタイル ゲームを作成しています。私が持っているコードでは、このエラーが発生します:

Exception in thread "main" java.lang.IllegalArgumentException: Width (-1) and height (-1) cannot be <= 0

この行から:

Image newImage = gc.createCompatibleImage(
        image.getWidth(null),
        image.getHeight(null),
        Transparency.BITMASK);

ここに私が持っているコーディングがあります:

public Image getMirrorImage(Image image) {
    return getScaledImage(image, -1, 1);
}

private Image getScaledImage(Image image, float x, float y) {
    // set up the transform
    AffineTransform transform = new AffineTransform();
    transform.scale(x, y);
    transform.translate(
        (x-1) * image.getWidth(null) / 2,
        (y-1) * image.getHeight(null) / 2);

    // create a transparent (not translucent) image
    Image newImage = gc.createCompatibleImage(
        image.getWidth(null),
        image.getHeight(null),
        Transparency.BITMASK);

    // draw the transformed image
    Graphics2D g = (Graphics2D)newImage.getGraphics();
    g.drawImage(image, transform, null);
    g.dispose();

    return newImage;
}

私が別のことをする必要があるかもしれないこと、またはそれを機能させる方法を誰かが私に説明できますか? どうもありがとう

4

2 に答える 2

3

それらがまだ知られていない場合、 -1 を返すimage.getWidth(null)ことが可能です。image.getHeight(null)画像処理は同時に行うことができ、これらのメソッドを呼び出そうとしてもまだ進行している可能性があります (ローカルでもこの​​ IIRC を実行します)。幅と高さにアクセスしようとする前に、画像が読み込まれるのを待つために以前に使用したコードのスニペットを次に示します。

private void waitForImage(Image image) {
    Container container = new Container();
    MediaTracker tracker = new MediaTracker(container);
    tracker.addImage(image, 0);
    try {
        tracker.waitForID(0, 1000);
    } catch (Exception e) {
    }
}

ローカル テストを試したところ、いくつかの小さな画像の場合、待機時間は通常 1 ミリ秒でした。実際には追加の時間ではなく、幅と高さを取得するために最後のステージが完了するまでコードを待機させるだけです。

于 2011-04-10T23:26:13.703 に答える