20 AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
21 //derive()方法是jdk 1.6中新加入的方法,从使用视角看,是非常方便的builder方法
22 //下面被注释的语句和上面语句中获取的AlphaComposite对象是等同的。
23 //AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER).derive(0.5f);
24
25 BufferedImage buffImg = new BufferedImage(60, 60, BufferedImage.TYPE_INT_ARGB);
26 Graphics2D gbi = buffImg.createGraphics();
27 gbi.setPaint(Color.red);
28 gbi.fillRect(0, 0, 40, 40);
29 gbi.setComposite(ac);
30 gbi.setPaint(Color.green);
31 gbi.fillRect(5, 5, 40, 40);
32 g2d.drawImage(buffImg, 20, 20, null);
33 gbi.dispose();
34 }
35 }
8. 绘图提示:
Java 2D中提供了一些绘图提示的选项,以帮助我们在渲染时能够达到一种绘图速度和质量之间的平衡关系。在这些提示中最为常用的主要有以下三个:
KEY_ANTIALIASING 打开或者关闭形状抗锯齿特征。
VALUE_ANTIALIAS_ON
VALUE_ANTIALIAS_OFF
KEY_TEXT_ANTIALIASING 打开或者关闭字体的抗锯齿特征
VALUE_TEXT_ANTIALIAS_ON
VALUE_TEXT_ANTIALIAS_OFF
KEY_INTERPOLATION 当对形状进行缩放或者旋转操作时,为像素的插换选择一个规则
VALUE_INTERPOLATION_NEAREST_NEIGHBOR
VALUE_INTERPOLATION_BILINEAR
VALUE_INTERPOLATION_BICUBIC
下面的代码演示了如何设定指定的绘图提示:
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
该语句打开了g2的图形抗锯齿功能。下面的示例代码主要演示了抗锯齿功能。
1 public class MyTest extends JPanel {
2 private boolean isOutput = false;
3 public static void main(String[] args) {
4 JFrame frame = new JFrame();
5 frame.setTitle("RenderingHints");
6 frame.setSize(300, 400);
7 frame.addWindowListener(new WindowAdapter() {
8 public void windowClosing(WindowEvent e) {
9 System.exit(0);
10 }
11 });
12 Container contentPane = frame.getContentPane();
13 contentPane.add(new MyTest());
14 frame.show();
15 }
16 public void paintComponent(Graphics g) {
17 super.paintComponent(g);
18 //画出四条泳道
19 g.setColor(Color.orange);
20 g.drawLine(0, getHeight()/4, getWidth(), getHeight()/4);
21 g.drawLine(0, getHeight()/2, getWidth(), getHeight()/2);
22 g.drawLine(0, getHeight()*3/4, getWidth(), getHeight()*3/4);
23 paintAntialiasingText(g);
24 paintAntialiasingShape(g);
25 }
26 //打开和关闭文字抗锯齿提示
27 private void paintAntialiasingText(Graphics g) {
28 Graphics2D g2d = (Graphics2D) g;
29 // 将字体放大,对比后效果更明显
30 Font fi = new Font("SansSerif", Font.BOLD + Font.ITALIC, 30);
31 g2d.setFont(fi);
32 // 1. 在第一泳道打开文字抗锯齿
33 g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
34 RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
35 g2d.drawString("Hello World", 20, 40);
36 RenderingHints rhints = g2d.getRenderingHints();
37 //测试文字抗锯齿特征是否已