R 规则设置alpha 合成值,把颜色组件设置为零,又通过设置alpha值为0.0f,使之透明。然后我们填充一个覆盖整个图像区域的矩形。我们不必设置颜色值,因为根据 CLEAR 规则,每个像素的前景和背景色所占成分都是零,所以这两者都不参与像素的生成。但我们仍要填充该矩形,因为这将确定被操作的图像像素。
这里,我们可以稍微了解一下怎样控制图像的质量。
在Java应用程序中创建图像(3)
时间:2010-03-27
着色微调
对着色操作的许多方面而言,都有一个在质量和速度间选择的问题。着色操作就像大多数事情一样 — 质量是需要代价的,而这里的代价就是处理时间。所有的着色操作都有缺省设置,其中存在一个选择,缺省设置是特定于平台的,但您可以通过调用用于着色的Graphics2D对象的setRenderingHint()方法自己选择。虽然只有一些微调,如果您的计算机不支持与您指定的微调相对应的着色操作选项,这些微调就无法生效。
通过添加以下对 createSprite()方法的调用,可以确保得到由我们的alpha 合成操作可能生成的最好效果。
BufferedImage createSprite(int spriteSize)
{
// Create image with RGB and alpha channel
BufferedImage sprite = new BufferedImage(spriteSize, spriteSize, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2D = sprite.createGraphics(); // Context for buffered image
// Set best alpha interpolation quality
g2D.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,
RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
// Clear image with transparent alpha by drawing a rectangle
g2D.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f));
Rectangle2D.Double rect = new Rectangle2D.Double(0,0,spriteSize,spriteSize);
g2D.fill(rect);
// plus the rest of the method...
}
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 |
确定怎样做内插。 |
在对一个源图像做变形时,变形后的像素 |