2016-03-01 3 views
1

У меня есть проект с краской, который я использовал с помощью JPanel и Graphics2D. Все хорошо, за исключением того, что качество самой краски плохое и неровное. Как я могу улучшить его? Это где установка я моя кисть:Улучшение качества краски

public void setupbrush(){  
    strk= new BasicStroke(4, Stroker.CAP_ROUND, BasicStroke.JOIN_ROUND); 
    bru1=(Graphics2D)jPanel1.getGraphics(); 
    bru1.fillRect(0, 0, getSize().width, getSize().height); 
    bru1.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
       bru1.fillRect(10, 10, getSize().width, getSize().height); 
       bru1.setPaint(Color.red); 
       bru1.setStroke(strk); 


       } 

This is the outcome

ответ

3

У меня есть этот хороший метод мало библиотек, я использую много ...

public static void applyQualityRenderingHints(Graphics2D g2d) { 
    g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); 
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
    g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); 
    g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE); 
    g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); 
    g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
    g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); 
    g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); 
} 

Я настоятельно рекомендую вам иметь Поиграй со значениями и посмотреть, что сработает для вас.

Первое, что вам не следует делать, это применить к копии Graphics, которую вы не создали в первую очередь. Это важно, так как Graphics общий ресурс, который используется всеми компонентами в окне, поэтому внесение изменений в нее может привести к неожиданным результатам

Это означает, что это ...

bru1=(Graphics2D)jPanel1.getGraphics(); 

будет проблемой , но не только для этого ответа. getGraphics не так, как покрасочные работы, кроме удалось вернуть null, ничего вы рисуете на него можно протирать в следующий раз цикл paint происходит

Посмотрите на Painting in AWT and Swing и Performing Custom Painting для получения более подробной информации о том, как картина должна быть сделанный.

Тогда, как только вы правильно для этого, то ваш метод paintComponent может выглядеть примерно так ...

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2d = (Graphics2D) g.create(); 
    applyQualityRenderingHints(g2d); 
    // Do your custom painting here 
    g2d.dispose(); 
}