0

以下の例を、通常の長方形の代わりに RoundedRectangles を使用する図に変えたいと思っています。クリッピング フレームに可能性があることはわかっています。しかし、現在 g2d.fillXXX() 関数を使用していないため、現在の状況にどのように適用されるかはよくわかりません。

画像: 例 http://img827.imageshack.us/img827/6048/cardbackgroundcut.jpg

コード:

private void createImage() {
    bufferedImage = new BufferedImage(dimension.width, dimension.height, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2d = (Graphics2D)bufferedImage.createGraphics();

    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
    g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
    g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);

    int colorRed = 128;
    int colorGreen = 0;
    int colorBlue = 128;

    for (int x = 0; x < dimension.width; x++) {
        for (int y = 0; y < dimension.height; y++) {
            int dx = Math.min(x, dimension.width - x);
            int dy = Math.min(y, dimension.height - y);
            if (dx < 10 || dy < 10) {
                g2d.setColor(new Color(colorRed, colorGreen, colorBlue, 255 - Math.min(dx, dy)));
                g2d.drawLine(x, y, x, y);
            }
            else {
                g2d.setColor(new Color(colorRed, colorGreen, colorBlue, 192 - Math.min(dx, dy)));
                g2d.drawLine(x, y, x, y);
            }
        }
    }
}

したがって、基本的には、色の変化を防ぎながら、画像の外縁と内縁の両方に角の丸い長方形を持たせたいと思います。

これを達成する方法の手がかりはありますか?

よろしく。

4

1 に答える 1

1

RoundRectangleと 4 つの (回転した)長方形を使用し て、すべての形状をAreaの to にキャストし、

area.exclusiveOr(ohterArea)

メソッドを使用して、4 つの個別の (異なるグラデーション) パーツを取得します。次に、 GradientPaintクラスを使用してこれらのパーツを 1 つずつ描画し、これら 4 つのパーツすべてを目的のグラデーションにペイント (塗りつぶし) します。

最後のステップとして、ペイントを静的な色に戻し、古い RoundedRectangle を描画します (エッジを取得するため)。

于 2013-04-03T13:24:20.700 に答える