RenderingHints
类定义了多种着色微调,它们存储在一个映射集的
Graphics2D
对象里。
setRenderingHint()
方法的参数是一个键以及对应的键值。在我们的代码中,第一个参数是代表 alpha 合成微调的键,第二个参数是该微调的值。该微调的其它可能的值有
VALUE_ALPHA_INTERPOLATION_DEFAULT
,代表平台缺省值;以及
VALUE_ALPHA_INTERPOLATION_SPEED
,代表追求速度而不是质量。
您还可以为下面的键提供微调:
键描述KEY_ANTIALIASING决定是否使用抗锯齿。当着色有倾斜角度的线时,通常会得到一组阶梯式的像素排列,使这条线看上去不平滑,经常被称为 锯齿状图形。抗锯齿是一种技术,它设置有倾斜角度的线的像素亮度,以使线看起来更平滑。因此,这个微调是用来决定在着色有倾斜角度的线时是否在减少锯齿状图形上花费时间。可能的值有 VALUE_ANTIALIAS_ON, _OFF
或 _DEFAULT
。KEY_COLOR_RENDERING控制颜色着色的方式。可能的值有 VALUE_COLOR_RENDER_SPEED, _QUALITY
或 _DEFAULT
。KEY_DITHERING控制如何处理抖动。抖动是用一组有限的颜色合成出一个更大范围的颜色的过程,方法是给相邻像素着色以产生不在该组颜色中的新的颜色幻觉。可能的值有 VALUE_DITHER_ENABLE, _DISABLE
或 _DEFAULT
。KEY_FRACTIONALMETRICS控制显示文本的质量。可能的值有 VALUE_FRACTIONALMETRICS_ON, _OFF
或 _DEFAULT
。KEY_INTERPOLATION确定怎样做内插。
在对一个源图像做变形时,变形后的像素很少能够恰好对应目标像素位置。在这种情况下,每个变形后的像素的颜色值不得不由四周的像素决定。
内插就是实现上述过程。有许多可用的技术。可能的值,按处理时间从最多到最少,是 VALUE_INTERPOLATION_BICUBIC, _BILINEAR
或 _NEAREST_NEIGHBOR
。KEY_RENDERING确定着色技术,在速度和质量之间进行权衡。可能的值有 VALUE_RENDERING_SPEED, _QUALITY
或 _DEFAULT
。KEY_TEXT_ANTIALIASING确定对文本着色时是否抗锯齿。可能的值有 VALUE_TEXT_ANTIALIASING_ON, _OFF
或 _DEFAULT
。
使用java.awt.RenderingHints类设置参数,改善图片质量
java.awt.RenderingHints类 javadoc文档连接:
http://gceclub.sun.com.cn/Java_Docs/jdk6/docs/zh/api/java/awt/RenderingHints.html
一般使用的代码如下:
RenderingHints. VALUE_ANTIALIAS_ON);
rh.put(RenderingHints.KEY_STROKE_CONTROL
, RenderingHints.VALUE_STROKE_PURE);
rh.put(RenderingHints.KEY_ALPHA_INTERPOLATION
, RenderingHints.ALPHA_INTERPOLATION_QUALITY);
g2d.setRenderingHints(rh);
// 假设renderQuality是RenderingHints的私有类成员
if (isAccelerated()) {
renderQuality=new RenderingHints(RenderingHints. KEY_RENDERING,
RenderingHints. VALUE_RENDER_QUALITY);
} else {
renderQuality=new RenderingHints(RenderingHints. KEY_RENDERING,
RenderingHints. VALUE_RENDER_SPEED);
}
这样设置后比没有设置效果会好点。但是和acdsee等图片工具看起来还有差距。比较奇怪还需要设置什么参数才能优化图片质量。。。
另外,关于性能今天看到的一篇文章有点作用。。
现在图片预览一样存在Jprofile的大量内存使用的问题.
看到javatar的blog: http://javatar.javaeye.com/blog/41098
提及使用第三方的包 JMagicK: http://www.yeo.id.au/jmagick/ (Java接口)
生成图片预览的方法,因为目前项目面临上线的压力如果改变另外一种实现方式等于是从根部重构,面临测试的压力。。