绘图操作流程
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-x -2.0-rc2-x-2.0.1:跨平台手机游戏开发的强大引擎》 cocos2d-x是一个广泛使用的开源游戏开发框架,专为构建2D游戏、演示和其它图形交互应用而设计。这个框架的版本"2.0-rc2-x-2.0.1"是其发展过程中的一...
cocos2d-2.0-x-2.0.2.zip.001 第一部分总共三部分
《基于cocos2d-2.0-x-2.0.3的游戏实例——魔塔(win版)详解》 在游戏开发的世界里,cocos2d-x是一个广受欢迎的开源跨平台2D游戏引擎,它基于C++,并提供了Python和Lua等语言的绑定,使得开发者能够快速构建游戏。...
PH2.0 PHB2.0 PHD2.0接插件Altium封装库AD三维视图PCB封装库(2D3D封装库),,封装列表如下: omponent Count : 64 Component Name ----------------------------------------------- PH2.0-LI-2P PH2.0-LI-3P PH...
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-20.0-x-2.0.4用的jar包,这个是最新的。懒人必备!!
cocos2d-2.0-x-2.0.2.zip.003第三部分,总共三部分
cocos2d-2.0-x-2.0.2.zip.002第二部分,总共三部分,都是免费的
<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...
《使用cocos2d-x-2.0-2.0.4开发的简单跨平台益智类魔塔小游戏》 cocos2d-x是一个开源的游戏开发框架,它基于C++,支持多平台,包括iOS、Android、Windows以及Mac OS等。在本项目中,开发者利用cocos2d-x 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 ...
- **格式**:$GPGSA,<1>,<2>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<4>,<5>,<6>*hh<CR><LF> - **字段解释**: - `<1>`:模式(M表示手动,A表示自动)。 - `<2>`:当前状态(1表示无定位信息,2表示2D...
2. "PHD-2.0mm连接器.PcbLib":可能是另一种版本或变型的PH2.0连接器封装。 3. "PH2.0-立式直插插座.PcbLib":直接对应标题中的描述,提供了立式直插插座的封装数据。 4. "PHB-2.0mm连接器.PcbLib":可能代表不同的...
<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>出版...
《基于cocos2d-2.0-x-2.0.3的游戏实例Stua(win版)》 本文将深入探讨使用Cocos2d-x 2.0.3版本开发的游戏实例——Stua,以及与Box2D物理引擎的集成应用。Cocos2d-x是一个开源的、跨平台的2D游戏开发框架,它基于C++...
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/...
<script src="L2Dwidget.min.js"></script> <!-- 启动看板娘 --> <script src="launch.min.js"></script> </body> </html> ``` 此外,为了使看板娘能够正确地在网页上展示,开发者还需要根据Live2D的API文档...
使用cocos2d-x开发的跨平台知识问答小游戏,基于cocos2d-x-2.0-2.0.4版本,在ipad4.3,ipad5.0,ipad6.0,iphone4.3,iphone5.0,iphone6.0系统中运行成功,后续添加android系统工程,更新中... 软件开发设计:PHP、QT、...
这里利用参数依赖Lyapunov 函数, 设计离散LPV 重复过程的参数依赖鲁棒l<sub>2</sub>-l<sub>∞</sub> 动态输出反馈控制器, 可确保闭环离散LPV 重复过程沿通道渐近稳定, 且具有一定的l<sub>2</sub>-l<sub>∞</sub> ...