Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BuffereImage';s getSubimage性能_Java_Swing_2d - Fatal编程技术网

Java BuffereImage';s getSubimage性能

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模式(例

我正在开发一个Java 2D渲染程序(在1.6.0_11上运行),它使用外部图像进行UI渲染。这些大型图像同时包含多个UI图形部分,我现在使用BuffereImage.getSubimage()提取这些部分。假设一个普通的桌面系统(没有启用DirectX/OpenGL加速),我的问题是:

  • getSubimage()是一个内存高效的调用,因为它共享底层图像数据,但这是否会影响这些子图像与Graphics2D.drawImage()的渲染速度
  • 如果图像使用8位/像素调色板模式,使用RGBA模式(例如4倍内存)或依赖调色板颜色模型(例如转换时间)的增益/损耗是多少

据我所知,
getSubimage(…)
不应该对渲染有任何显著影响

转换图像数据的速度很慢,通常最好避免动态转换


对于图像,慢度可分为两类:

  • 磁盘I/O
  • 数据处理
磁盘I/O很容易成为最慢的部分

如果您打算只使用映像的一部分,最好只从磁盘加载映像的一部分


我的经验是,只做真正需要的工作比标准库的工作要好。

这不是磁盘I/O时间,因为源映像已完全加载到内存中。这张合成图像的一个样本可以在上看到。所有的UI图形组件都是从这类图像中提取出来的。我接受这个答案,因为它清楚地说明了——尽管不是很详细——我从那以后也发现了一些东西,并提出了另一种处理图像的方法。谢谢。原来,这里有点灰色。如果未使用DirectX管道,则每次提取子图像所需的时间比使用子图像的单独图像要多一些。如果图像是需要特殊坐标系渲染的平铺,则差异是明显的。有了DirectX和一个现代图形卡,BuffereImage就变成了一个托管映像—存在于视频ram中—并利用了卡的硬件支持。在这种情况下,子图像和非子图像之间没有显著差异。