绘图操作流程
Graphics2D的内部状态属性决定如何去绘制图形。Graphics2D的内部状态包括以下七种:
paint
Paint决定着色方法。着色方法用于填充诸如笔划路径或形状内部等区域的颜色。可以创建单色的着色法,也可以用变化的色调进行着色,或者使用平铺的填充模式。
stroke
Stroke决定笔划。笔划用于绘制形状的边框。可以选择边框的粗细和线段的虚实以及笔划样式与线段连接样式。
font
文本的绘制是通过创建一个表示要绘制的字符的形状,然后填充这个形状而得。而font决定了对一个给定的字符集,所创建形状样式。
transformation
所有的图形元素在绘制前会经过一个几何变换,用于在绘制期间将图形元素从用户空间变换到设备空间。
compositing rule
组合规则决定了目标图象与源图象颜色的组合方式。
clipping shape
所有的绘制操作将会限制在这个剪切形状中(clipping shape),在这个形状之外的点不会受到影响。默认情况下,这个剪切形状为null。也就是说绘制的范围只受目标图象的限制。
rendering hints
Java 2D API 允许用户选择是尽快绘制对象,还是倾向于以尽可能高的质量绘制对象。通过指定Graphics2D内部状态的绘制建议(rendering hints) 属性来反映用户的选择。并非所有的平台都支持对绘制模式的修改,因此指定绘制模式的建议并不能保证一定会被使用。
图形元素在绘制过程中会经过一系列的操作,称之为“绘制流程”(rendering pipeline),可以分为五个步聚,其中第一步依赖于要绘制图形元素的种类。
①决定要将绘制的形状。对于使用fill()方法来绘制的Shape,这个Shape会使用当前的transformation属性来做几何变换;而对使用draw()方法来绘制的Shape,首先会根据当前的stroke属性将Shape的轮廓转换为另一个Shape(对这个Shape调用fill方法就得到原来Shape的轮廓),然后可归结为第一种情况;文本的绘制是将根据当前的Font属性将字符转换为Shape,然后归结为第一种情况;对于绘制图象,根据当前的transformation属性对图象实现变换。
正如我们所看到的,实际上Graphics2D只会做两种事:填充图形与绘制图象。绘制图形与绘制字符串看起来事两种不同的操作,实际上它们只是填充图形的特殊情形。
②光栅化图形。光栅化是指将理想的形状(理想的形状是连续的,而实际我们只能处理离散的东西)转换为一个带值的点集。绘制建议就是控制光栅化质量的属性。对于绘制图象的情况,其本身就是一个光栅化的数据。
③对形状进行剪切。使用当前的剪切形状对形状进行剪切。
④决定要使用的颜色。对于填充图形操作,使用Paint属性来决定如何决定着色方式。对于绘制图象,其本身已经带有颜色的信息。
⑤组合颜色。使用当前的组合规则将图形颜色与目标图形的颜色组合。
关于透明
绘制只是一种近似,因为在离散化过程中肯定会造成误差。举个例子:假设这个有个形状(Shape),需要使用某种颜色来填充。那么有多种不同的可以实现这种操作。其中有的速度快,有的效果好。
Ⅰ 锯齿与反锯齿
最快的方法就是将Shape内部的点全部着色,而不理会其他的点。使用这种算法,每个象素要么是完全被着色,要么完全没有变化。这种算法会造成生成的图象看起来有个很粗糙的边界,图形学上称之为“走样”(aliased)。
为了提高图形质量,必须克服或减少走样现象。光栅图形的反走样方法主要有两类:
第一类是超采样或称后置滤波。这类算法的基本思想着眼于提高分辨率,虽然采用高分辨率的光栅图形显示器也是一个选择,但它受到客观条件的限制,而且也不经济。因此,我们往往采用软件实现的方法,即:将低分辨率的图形像素划分为许多子像素,在较高分辨率上对各子像素的颜色值或灰度值进行计算,然后采用某种平均算法,将原像素内的各子像素的颜色值或灰度值的平均值作为该像素显示的颜色值或灰度值,在较低分辨率的光栅图形设备上进行显示。
第二类方法称为前置滤波。即:把像素作为一个有限区域而不是一个面积为零的点来处理。
Ⅱ 光栅化
在绘图操作流程中,光栅化将一个理想形状转换为一个点集。其中每个点有个表征其覆盖程度的值,这个值叫做Alpha分量。每个点都有个alpha分量,一个图象的所有点的alpha值叫做Alpha通道。(alpha channel)
alpha一般取值范围为0.0到1.0。alpha为0时表示完全不覆盖,也就是完全透明;alpha为1是表示完全覆盖。
复合
当两个图形对象重叠时,有必要确定使用哪些颜色来处理重叠像素。例如,如果红色矩形与蓝色矩形相重叠,则其重叠区域应该处理为红色、蓝色或二者的某种组合。重叠区域中像素的颜色决定于哪一个矩形位于上面及其透明程度。确定使用何种颜色处理重叠对象所共有像素的过程称为复合。
坐标系统
Java 2D API 有两种坐标系统:
- <!---->用户空间是一种与设备无关的逻辑坐标系统。应用程序独占使用此坐标系统。所有传入 Java 2D 绘制例程中的几何图形均在用户空间中定义。
- <!---->设备空间是一种与设备有关的坐标系统,它根据目标绘制设备的不同而变化。
<!---->
Java 2D 系统自动在用户空间和目标绘制设备的设备空间之间执行必要的转换。虽然显示器的坐标系统和打印机的坐标系统有很大的差别,但这些差别对应用程序并无影响。
分享到:
相关推荐
cocos2d-2.0-x-2.0.2.zip.002第二部分,总共三部分,都是免费的
cocos2d-2.0-x-2.0.2.zip.001 第一部分总共三部分
PH2.0直插插座PHB2.0mm连接器PHD2.0mm连接器2D3D三维视图PCB封装库AD库(98个封装合集) Component Count : 64 Component Name ----------------------------------------------- PH2.0-LI-2P PH2.0-LI-3P PH2.0-...
cocos2d- x 跨平台手机游戏引擎 最新的版本
网上找到的一个游戏实例 不过版本是cocos2dx 1.0.x的 我做了些修改 能在2.0.3上正常运行
开发cocos2d-20.0-x-2.0.4用的jar包,这个是最新的。懒人必备!!
cocos2d-2.0-x-2.0.2.zip.003第三部分,总共三部分
网上找到的一个游戏实例 不过版本是cocos2dx 0.0.9的 我做了些修改 能在2.0.3上正常运行
<result name="maintainReport">/page/report/jira/maintain_version_reach_component_trend_report.jsp</result> <result name="dataReport">/page/report/jira/maintain_version_reach_component_trend_table.jsp...
Major Functionalities in MPEG-4 Version 2<br>m 3.1 Systems<br>m 3.2 Visual<br>n 3.2.1 Natural Video<br>n 3.2.2 Body animation<br>n 3.2.3 Coding of 3-D Polygonal Meshes<br>m 3.3 Audio<br>m 3.4 DMIF<br...
PH2.0 PHB2.0 PHD2.0接插件Altium封装库AD三维视图PCB封装库(2D3D封装库),,封装列表如下: omponent Count : 64 Component Name ----------------------------------------------- PH2.0-LI-2P PH2.0-LI-3P PH...
使用cocos2d-x-2.0-2.0.4开发的简单跨平台益智类魔塔小游戏
- Camera Window >>DEMO - Cinematics >>DEMO - Content Fitter >>DEMO - Forward Focus >>DEMO - Geometry Boundaries - Limit Distance >>DEMO - Limit Speed >>DEMO - Numeric Boundaries >>DEMO - Pan ...
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class> </servlet> <servlet-mapping> <servlet-name>DisplayChart</servlet-name> <url-pattern>/servlet/DisplayChart</url-pattern> </...
<br>http://img.verycd.com/posts/0712/post-320613-1198518185.gif<br><br>书名:Quartz 2D Graphics for Mac OS X® Developers <br>作者:R. Scott Thompson <br>出版社:Addison Wesley Professional <br>出版...
2D Graphics and Animation<br/>Chapter 3. Interactivity and User Interfaces<br/>Chapter 4. Sound Effects and Music<br/>Chapter 5. Creating a 2D Platform Game<br/>Chapter 6. Multi-Player Games<br/><br/...
使用cocos2d-x开发的跨平台知识问答小游戏,基于cocos2d-x-2.0-2.0.4版本,在ipad4.3,ipad5.0,ipad6.0,iphone4.3,iphone5.0,iphone6.0系统中运行成功,后续添加android系统工程,更新中... 软件开发设计:PHP、QT、...
cocos2d-x-2.0中CCScrollView的使用Demo
主要类说明: ---------------------------- ...PhysicsSprite 物理精灵 将Sprite和box2d进行了二次封装<br/> StaticData 静态数据类 废弃了...<br/> StaticDataEx 静态数据类<br/> TextData 专门保存字符串数据的<br/>
PH2.0-立式直插插座 2.0mm连接器 Altium封装 AD封装库 2D+3D PCB封装库