相对于颜色模型的Java绘制速度

问题描述:

我有一个带有IndexColorModel的BufferedImage。我需要将该图像绘制到屏幕上,但我注意到使用IndexColorModel时这很慢。但是,如果我通过身份仿射变换运行BufferedImage,它将使用DirectColorModel创建图像,并且绘画速度会更快。下面的代码我使用相对于颜色模型的Java绘制速度

AffineTransformOp identityOp = new AffineTransformOp(new AffineTransform(), AffineTransformOp.TYPE_BILINEAR); 
displayImage = identityOp.filter(displayImage, null); 

我有三个问题
1.为什么画上一个IndexColorModel较慢?
2.有什么办法可以加快IndexColorModel的绘制速度吗?
3.如果2.的答案是否定的,这是从IndexColorModel转换为DirectColorModel的最有效方法吗?我注意到,这种转换是依赖于图像的大小,我想删除该依赖关系。

感谢您的帮助

+0

你是如何创建的BufferedImage? – 2010-03-26 23:09:17

+0

我使用1.4版通过dcm4che创建它。这是一个非常复杂的项目。你喜欢什么特定的信息? – Jon 2010-03-27 00:09:44

这是一个评论太长......

您确保的BufferedImage你创建是最好根据你的操作系统而定?你应该总是创建一个“兼容”BufferedImage。最快的,比方说Windows,可能是TYPE_INT_ARGB,但在OS X上并不是这样,反之亦然。

像这样的东西(哎哟,得墨忒耳的法伤):

GraphicsEnvironment 
     .getLocalGraphicsEnvironment() 
     .getDefaultScreenDevice() 
     .getDefaultConfiguration() 
     .createCompatibleImage(width, height,Transparency.TRANSLUCENT) 
+0

我无法控制最初的ColorModel。我必须调用一个返回给我一个IndexColorModel的函数。然后我调用displayImage = new BufferedImage(cm,displayImage.getRaster(),false,null),其中cm是一个IndexColorModel。有没有更好的方式来整合这个IndexColorModel? – Jon 2010-03-29 17:30:19