提高油漆质量

时间:2016-03-01 01:27:37

标签: java swing graphics2d

我有使用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

1 个答案:

答案 0 :(得分: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();
}