我有使用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);
}
答案 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 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();
}