浅谈JavaSE性能优化(1)——BufferedImage与像素级渲染

本文探讨了Java图形渲染的性能优化,尤其是BufferedImage和像素级渲染。Java2D虽然相对C/C++性能稍逊,但通过像素级优化和使用ARGB模式可以实现高质量的图像效果。文章介绍了ARGB模式的概念,以及如何使用BufferedImage进行像素操作,包括创建和获取像素的方法。同时,提到了Processing和PulpCore这两个Java2D渲染库,尽管它们主要关注效果优化而非性能提升,但在2D渲染和动画处理上表现出色。最后,作者指出对Java性能的误解是其发展的一大障碍,鼓励Java开发者通过技术实践打破这种偏见。
摘要由CSDN通过智能技术生成

写在前面的话:


JAVA 应用结构简单,易于编写,能够轻易完成高强度的复杂交互,并且安全性高,稳定性强,免费资源丰富,网络功能强大,拥有近乎完美的多线程机制。有必要的前提下, Java 程序员甚至可以使用 JNI 直接与本地环境沟通,从而绕过虚拟机的性能制约。

 

JAVA 应用的跨平台特性,更(理论上)让其可以运行于任何系统和平台之上,最大限度的增加了程序的通用可能。

 

从本质上讲,无论你以 Java 开发桌面应用也好,网页应用也罢,其实并没有明显的界线存在。究其根本,无非是使用 Applet/JApplet/JavaFX 当做容器,抑或 AWT/Swing/SWT 当作容器的区别罢了。

 

快捷、灵活、通用、稳定,以上这些优势,原本足以让 JAVA 将成为未来网页游戏乃至中小型桌面游戏开发的主流语言之一。

 

然而, Java 的运行效率问题,似乎却成了这一些美好前景的绊脚石。更直接的说,有一些人武断的认为, Java “缓慢”的运行速度,让它根本不适合作为游戏客户端之用。

 

即便自 JDK1.6 Java 的图形渲染能力已经有了显著提升,即便国外像 RuneScape 之类的 Java3D 网页游戏已经上线盈利很多年( PS :顺便鄙视下 Jagex 最近对 RuneScape 作的人物属性调整……),即便连 NetBeans 的运行速度都已经变得能同普通桌面程序不遑多让。但是,某些自 2004 年后或许从未接触过新技术的家伙, 依旧乐此不疲的散布着有关 Java 性能的流言蜚语。

 

在某些落伍人士眼里, Java 如同洪水猛兽,又好像是他们天生的对头。他们甚至宁愿选择某些行将就木的技术,他们甚至宁愿将某些只适合做低成本动画的东西视为命根,他们甚至宁愿花大力气去处理那些因为不支持实际多线程、 CPU 占用过高、硬件加速不到位、资源回收异常等等问题而引发的致命 BUG ,也不愿意去多了解一下 Java 。他们将一种原本可以带来巨大商业利益的语言视若等闲,他们宁愿让自己的雇主花费数倍的精力与财力去打造垃圾,也不愿意让雇主和公司拥有接触到更为优秀技术的机会。

 

不得不说,这即是 Java 的遗憾,更是某些落伍人士雇主及其公司,乃至整个游戏产业的遗憾。

 

当然,一味的指责他人,就成了抱怨,势必会犯“有嘴说别人,没嘴说自己”的民族通病。事实上,人们对于 Java 性能方面之所以会产生误解,除了旁人的傲慢与偏见外,自然也同 Java 自身的发展历程密不可分(具体原因我在其它的博文中已经阐述过很多次,此处不再赘述)。

 

但总体上讲,除了原 Sun 公司本身的不作为,以及 Java 偏向企业级开发,偏向服务器端开发的大环境影响外。 Java 进行游戏开发,或者说桌面开发的最大缺陷,就在于其图形开发方面,特别是有关于渲染优化方面,乃至整个 Java 游戏开发领域的书籍资料都严重匮乏。没错,相比浩如烟海的 Java 服务器端技术资料而言, Java 游戏开发方面的资源凤毛麟角。在某个黑暗时期中,甚至连 Java 版的贪食蛇、俄罗斯方块、超级马里奥之类的资源都会被人视为经典。

 

不客气地说,如果凭那些东西就想让人树立对于 Java 游戏开发的信心,就算不等于痴人说梦,至少也是难于登天了。

 

而如果想要解决这个问题,那么更多的示例,以及更多的技术文章将必不可少。为此,笔者才会产生创作此系列博文的意愿,唯恨椽笔拙文,权作引玉之砖。

 

 

正文: BufferedImage 与像素级渲染

 

常有人说 Java 图形渲染很慢?嗯,相对 C/C++ 而言, Java2D 固有的图像处理能力确实有待提高。

 

但是,这也仅仅局限于对比 C/C++ 应用而言。

 

如果您是以其它什么东西与之比较,却得出 Java 渲染很慢的结论。那么,或者并不是出自 Java 本身的原因,而在于您并没能搞清楚该怎样正确的使用 Java 绘图。

 

况且,即便是相对于 C/C++ 而谈, Java 也并非相差到难以望其项背的地步。相对于某些行将就木的技术,至少我们除了异常积极的自行修改 JRE ,或者极端消极的等待 JRE 官方更新以外,还有使用 OpenGL 或者像素级优化这两条道路可走。

 

在本节当中,我们就先谈点基础的,来说说 Java 渲染的像素级优化吧。

 

像素与 RGB

 

像素是什么?简单的讲,像素就是色彩,像素是系统能够在计算机屏幕上显示的最小染色点。越高位的像素,其拥有的色板也就越丰富,越能表达颜色的真实感。

 

众所周知,图像是像素的复合,看似绚丽的形象,也无外是一个个肉眼难以分辨的细微颗粒集合罢了。

 

比如,在一些常见的 Java 图像处理中,我们经常会用到所谓的 RGB24 模式( 24 位三原色模式,在 Java2D 中以 TYPE_INT_RGB 表示),将 Red Green Blue 三种色彩加以混合,创造出唯一的色彩点并绘制到计算机之上。而这个色彩点,也就是所谓的像素。因为在 RGB24 Red Green Blue 三者都被分配有一个 0~255 的强度值,所以该 RGB 模式的极限机能就是 256*256*256 ,即至多可以显示出 16777216 种颜色。

 

PS :关于 16 位的 RGB565

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值