Learn Java2D
如果能够在无聊的时候,静下心来学习学习,总是会有收获的。可惜,年纪大了,心却还是没法静下来。最近,看了看 2D 方面的一些文档、代码,对2D有了一些基础的认识。
比较好的Java2D的教材:http://java.sun.com/docs/books/tutorial/2d/index.html
在2D中,主要的概念包括:
- Stroke:用于绘制Shape的外形,包括线宽、样式等。
- Paint:用于填充 Shape,Color,GradientColor、Texture等几种Paint形式。
- Composite:用于定义多种形状覆盖时的行为
- Transform:对基本形式进行变形的技术
- Clip:定义对图形的剪裁
- Font:也可以理解Font是一种图形形状的定义。
后来,又察看了已下 SVG 的相关规范,SVG与Java2D在概念上基本一致,而且完全可以在Java2D的基础上进行(不知道batik实现是不是基于Java2D的)。但 SVG把Java2D的概念从Low level的API提升到了一个更高的层次,使用DOM(对象)来表示了一个2D的世界,因此,也可以通过脚本对对象的操作来实现交互、变化的2D世界, 而Java2D则紧紧是在API层次,这些图形的对象也是一个非常暂态的,是使用代码而不是数据来表示2D。
那么,SVG技术可以如何反过来应用到GUI程序中呢?这里仅仅是我的一些很初步的想法:
- 在Swing的L&F中,可以直接使用外部的XML来配置L&F,这个就是现在的Synth的基本概念。
- 可以使用SVG来定义render。这里包括样式和render两部分,后者的动态性更强,更为复杂,也提供更灵活的功能。完全可能将原来在Java中通过代码来完成的功能,通过SVG来进行render。
- 可以采用一些优化的技术,例如,优化的编译技术,可以自动的把SVG编译成为Java2D的调用,从而提高render的速度,并降低对象所 占用的开销,或者对一些render采用cache处理,可以预期在性能上可以满足用户需求。但是,可以通过外部的工具,来对这些SVG进行配置(尤其是 提供WYSIWYG的可视化效果,从而让美学专家来定义显示效果)
0 Comments:
张贴评论
<< Home