【问题标题】:Drawing Rounded Rectangle绘制圆角矩形
【发布时间】:2013-04-03 13:09:15
【问题描述】:

我想将下面的示例转换为使用 RoundedRectangles 而不是普通矩形的图中,我知道剪切框有可能。 但我真的不知道它们如何适用于我目前的情况,因为我目前没有使用 g2d.fillXXX() 函数。

图片: example 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);
            }
        }
    }
}

所以基本上我希望图像的外边缘和内边缘都有一个圆角矩形,同时防止颜色的变化。

任何线索如何做到这一点?

问候。

【问题讨论】:

    标签: java graphics2d


    【解决方案1】:

    您可以使用 RoundRectangle 和 4(转)rectangles 将所有形状转换为Area's 并使用

    area.exclusiveOr(ohterArea)
    

    获得 4 个独立(不同梯度)部分的方法。 然后使用GradientPaint 类逐个绘制这些部分,以将所有这 4 个部分绘制(填充)为所需的渐变。

    作为最后一步,您将油漆设置回静态颜色并绘制旧的 RoundedRectangle(这样您就可以得到边缘)

    【讨论】: