Step By Step(Java 2D图形篇<二>) (六)

2014-11-24 03:21:37 · 作者: · 浏览: 17
的透明度值,以观察该组合规则的效果。

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 //测试文字抗锯齿特征是否已