2016-03-01 80 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,任何你畫給它的油漆週期內發生

看看Painting in AWT and SwingPerforming 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(); 
}