2013-04-03 3 views
0

Я хочу обратить пример ниже на фигуру, которая использует 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); 
      } 
     } 
    } 
} 

Поэтому в основном я хотел бы как внешний край и внутренний край изображения имеют закругленный прямоугольник, в то время как preversing изменения в цвете ,

Любые подсказки, как это сделать?

С уважением.

ответ

1

вы можете использовать RoundRectangle и 4 (повернут) rectangles бросить всю форму Area-х к и использовать метод

area.exclusiveOr(ohterArea) 

, чтобы получить 4 отдельные (различные градиентные) части. И затем нарисуйте эти части 1 на 1, используя класс GradientPaint, чтобы нарисовать (заполнить) все эти 4 части желаемого градиента.

и в качестве последнего шага вы установите краску на статический цвет, и вы нарисуете старый RoundedRectangle (так что получите край)

Смежные вопросы