Rendering:
java2D的呈现主要有三步
1.取得Graphics(Graphics2D)对象
2.设置Griaphics对象的属性
3.通过Graphics对象画图
取得Graphics对象
大多数情况下我们不需要去取得Graphics,一般他都提供给我们了,一般我们使用的就是在paintComponent中
protected void paintComponent(Graphics g)
他直接以参数的方式提供我们了这个对象。
直接传递的对象,设置了属性以后,对象的本质就发生了变化,等方法结束以后,这个对象的属性已经发生了变化,为了防止这种事情的发生,swing提供了取得Graphics的对象的副本的方式,相当于进来以后clone一个对象,等结束以后,clone对象结束,Graphics对象没有发生变化。代码如下:
protected void paintComponent(Graphics g) {
// create a copy
Graphics gTemp = g.create(); -----取得一个副本
// Set the state in gTemp instead
gTemp.translate(x,y);
// ...render the component contents using gTemp...
gTemp.dispose(); --副本结束
}
针对图片呈现
大多数情况下,你需要给图片进行绘画,需要取得Graphics,但是图片是不存在这个对象的,为了提供这个功能,一般我们会采用Image对象进行
Image img = createImage(w, h);
// Get the Graphics object for the image
Graphics g = img.getGraphics();
这样就满足了需要,但是有很多情况下图片是不允许修改的,所以我们无法在上面进行操作,建议使用BufferedImage
注意:我们个人不要调用paint(Graphic g);这个方法留给swing去调用,如果需要调用的话,我们可以去调用repaint()方法,如果直接调用的话,那就直接调用paintImmediately().
Graphic对象可以设置的属性。
fore color,background color,font,storke,hits,clip,compsite,paint,transform
Stroke:线属性控制,主要是重点是否是圆形,宽度等等。
默认情况下swing是一个像素的线,这样效率比较高。
setRenderingHint:
hits是质量和效率的平衡器,是用来权衡质量和效率的。
图片缩放比例的Hits
主要包括三个值,下面逐一介绍
RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR
在放大图像时,图像看起来会相应地有些斑驳模糊。在缩小图像时,在输出表示中,源像素的颜色被不作修改地使用,或者完全被跳过
RenderingHints.VALUE_INTERPOLATION_BILINEAR
当放大图像时,因为有 NEAREST_NEIGHBOR
,在图像中的颜色之间没有斑驳模糊边缘,但是混合可能沿样本排列的水平和垂直边缘显示一些微小的间断,这是由于插值斜面从样本的一侧到另一侧的突然更改造成的。当缩小图像时,更多图像像素具有它们自己的以结果输出表示的颜色样本,因为每个输出像素都从多达 4 个图像像素中接收颜色信息。
RenderingHints.VALUE_INTERPOLATION_BICUBIC
插值提示值—— 使用 X
和 Y
中的立方函数插入图像中整数坐标附近的 9 个样本,以生成一个颜色样本。从概念上讲,图像视图非常类似于 BILINEAR
算法中使用的视图,区别在于连接样本和曲线之间的颜色延伸,且当它们跨越样本边界时具有较好的斜面连续性。
放大图像时,没有斑驳模糊的边缘,与 BILINEAR
相比,插值显示得更光滑且原始图像中的所有边界都具有更好的描绘。当缩小图像时,甚至有更多的原始图像中的原始颜色样本将带有并表示它们的颜色信息。
图形反锯齿
系统默认的是有锯齿的,如果没有锯齿的话,需要去设置hits,具体的参数如下
RenderingHints.VALUE_ANTIALIAS_OFF
缺省值,是有锯齿的
文字反锯齿
RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT
文本抗锯齿提示值——根据 KEY_ANTIALIASING
提示或由实现选择的默认值完成文本呈现。
VALUE_TEXT_ANTIALIAS_OFF
强制管理反锯齿
RenderingHints.VALUE_TEXT_ANTIALIAS_ON
打开反锯齿,平滑过渡
RenderingHints.VALUE_TEXT_ANTIALIAS_GASP
RenderingHints.VALUE_ANTIALIAS_ON
分享到:
相关推荐
《Microsoft SQL Server 2008 T-SQL Fundamentals》是一本专为SQL Server初学者设计的教程,它深入浅出地介绍了Transact-SQL(T-SQL)的基础知识。T-SQL是SQL Server中用于数据查询、更新、操作和编程的主要语言。...
Get started with the fundamentals of Transact-SQL and learn how to write efficient and powerful database queries. With this hands-on guide, you'll gain a solid understanding of T-SQL and good ...
Core Java Volume I--Fundamentals(10th) 英文epub 第10版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
本篇将深入探讨"android-kotlin-fundamentals-apps"这个开源项目,它是一个专为学习Android Kotlin Fundamentals设计的应用程序集合。这些应用程序涵盖了Kotlin在Android开发中的基本概念和最佳实践,对于初学者和有...
总的来说,《Core Java(Volume I--Fundamentals 9th Edition)》作为Java编程学习的权威资料,不仅为读者提供了深入理解Java编程语言和核心技术的途径,同时也反映了学习Java后如何实现职业发展和薪资提升的可能性。...
综上所述,第九版的《Core Java Volume I--Fundamentals》是一本集理论与实践于一体的Java基础学习教材,对于想要深入了解Java编程的读者来说,是一本极具价值的参考书。通过这本书,读者不仅可以学习到Java的基础...
Linux Programming by Example - The Fundamentals
Volume I - Fundamentals》是一本系统学习Java编程的优秀教程,它不仅介绍了Java的基本语法,还深入探讨了面向对象编程的核心概念,为读者构建坚实的Java编程基础。通过阅读和实践书中的例子,读者将能够熟练掌握...
《T-SQL Fundamentals》是数据库开发者和管理员深入学习Transact-SQL(T-SQL)的基础教程。T-SQL是Microsoft SQL Server中的主要查询语言,用于数据查询、更新、插入和删除,以及复杂的数据库编程。这本书针对的是...
8. **JavaFX和Swing GUI**:探讨创建桌面应用程序的GUI工具包,包括JavaFX和Swing组件的使用。 9. **Java EE基础**:简要介绍Java企业版(Java EE)的相关技术,如Servlet、JSP和JPA。 这两本书全面覆盖了Java开发...
Java核心技术第九版Java7,Mobi格式电子书。Core Java Volume I--Fundamentals (9th Edition)
高清版-10[1].Cisco IOS-XR Fundamentals-破解版
linux-shell-scripting-fundamentals-bash.epub
Floyd - Digital Fundamentals 9e.djvu(需用DJVY软件打开)
首先,文档提到了《Core Java Volume I--Fundamentals, 9th Edition》,这是一本由Cay S. Horstmann和Gary Cornell编写的专业Java编程教材,从其标题和描述中,我们可以了解到这是一本专门针对经验丰富的程序员,...
读者将学习到Xcode的基础操作以及如何利用Xcode内置的调试工具来提高编程效率。 - **第2章:数据类型、变量与常量**:深入探讨Objective-C中的基本数据类型(如整型、浮点型)、变量声明和初始化、常量的概念及其...