3

アルファ(グラデーション)を使用していくつかのPNGを生成し、Java内でプログラムでそれらを描画することを望んでいるプロジェクトの作業を開始しようとしています。

(簡単な)例として、ボックスを描画し、ドロップシャドウを追加してから、これをPNGファイルに保存して、他のグラフィックにオーバーレイできるようにします。

  1. これは、標準のJREシステムライブラリで可能ですか?
  2. この種の操作を簡単にするライブラリはどれですか?

ありがとう。

4

1 に答える 1

4

これは、標準のJREシステムライブラリで可能ですか?

はい、それは可能であり、非常に簡単です。以下のコードは、この画像(transparent png)を生成します。

スクリーンショット

public static void main(String[] args) throws IOException {

    int x = 50, y = 50, w = 300, h = 200;

    // draw the "shadow"
    BufferedImage img = new BufferedImage(400, 300, BufferedImage.TYPE_INT_ARGB);
    Graphics g = img.getGraphics();
    g.setColor(Color.BLACK);
    g.fillRect(x + 10, y + 10, w, h);

    // blur the shadow
    BufferedImageOp op = getBlurredOp();
    img = op.filter(img, null);

    // draw the box
    g = img.getGraphics();
    g.setColor(Color.RED);
    g.fillRect(x, y, w, h);

    // write it to disk
    ImageIO.write(img, "png", new File("test.png"));
}

private static BufferedImageOp getBlurredOp() {

    float[] matrix = new float[400];
    for (int i = 0; i < 400; i++)
        matrix[i] = 1.0f/400.0f;

    return new ConvolveOp(new Kernel(20, 20, matrix),
                          ConvolveOp.EDGE_NO_OP, null);
}

この種の操作を簡単にするライブラリはどれですか?

他のユースケースにもよると思います。ボックスや楕円のような単純な形状の場合、上記の解決策を選択します。ライブラリは必要ありません。

于 2012-04-08T09:05:29.867 に答える