Java BuffereImage';s getSubimage性能
我正在开发一个Java 2D渲染程序(在1.6.0_11上运行),它使用外部图像进行UI渲染。这些大型图像同时包含多个UI图形部分,我现在使用BuffereImage.getSubimage()提取这些部分。假设一个普通的桌面系统(没有启用DirectX/OpenGL加速),我的问题是:Java BuffereImage';s getSubimage性能,java,swing,2d,Java,Swing,2d,我正在开发一个Java 2D渲染程序(在1.6.0_11上运行),它使用外部图像进行UI渲染。这些大型图像同时包含多个UI图形部分,我现在使用BuffereImage.getSubimage()提取这些部分。假设一个普通的桌面系统(没有启用DirectX/OpenGL加速),我的问题是: getSubimage()是一个内存高效的调用,因为它共享底层图像数据,但这是否会影响这些子图像与Graphics2D.drawImage()的渲染速度 如果图像使用8位/像素调色板模式,使用RGBA模式(例
- getSubimage()是一个内存高效的调用,因为它共享底层图像数据,但这是否会影响这些子图像与Graphics2D.drawImage()的渲染速度李>
- 如果图像使用8位/像素调色板模式,使用RGBA模式(例如4倍内存)或依赖调色板颜色模型(例如转换时间)的增益/损耗是多少
getSubimage(…)
不应该对渲染有任何显著影响
转换图像数据的速度很慢,通常最好避免动态转换
对于图像,慢度可分为两类:
- 磁盘I/O
- 数据处理
我的经验是,只做真正需要的工作比标准库的工作要好。这不是磁盘I/O时间,因为源映像已完全加载到内存中。这张合成图像的一个样本可以在上看到。所有的UI图形组件都是从这类图像中提取出来的。我接受这个答案,因为它清楚地说明了——尽管不是很详细——我从那以后也发现了一些东西,并提出了另一种处理图像的方法。谢谢。原来,这里有点灰色。如果未使用DirectX管道,则每次提取子图像所需的时间比使用子图像的单独图像要多一些。如果图像是需要特殊坐标系渲染的平铺,则差异是明显的。有了DirectX和一个现代图形卡,BuffereImage就变成了一个托管映像—存在于视频ram中—并利用了卡的硬件支持。在这种情况下,子图像和非子图像之间没有显著差异。