【发布时间】:2017-11-29 02:53:26
【问题描述】:
我用 red=x 和 alpha=y 创建了 256x256 图像:
int[] pix = new int[256*256];
for (int i = 0; i < pix.length; ++i)
pix[i] = i << 16;
BufferedImage img1 = new BufferedImage(256, 256, BufferedImage.TYPE_INT_ARGB);
img1.setRGB(0, 0, 256, 256, pix, 0, 256);
并已复制到易失性图像:
VolatileImage img2 = canvas.createVolatileImage(256, 256);
img2.createGraphics().drawImage(img1, 0, 0, null);
当我将 BufferedImage 绘制到画布上时,它会错误地处理 alpha 并且没有加速(drawImage 为 0.9 毫秒):
当我绘制 VolatileImage 时,它会处理 alpha 并加速(0.03ms):
但它在 Windows 下。在 MacOS 下,我看到了不同的结果。对于 BufferedImage,它不处理 alpha,但加速,对于 VolatileImage,它正确处理 alpha,但不加速。 (或者可能两者都没有加速,只是 BufferedImage 的软件处理要快得多)。
问题 - 如何在所有平台上使用正确的 alpha 处理和加速正确地绘制图像。
ps。 img2.setAccelerationPriority(1) 没有任何效果。
pps。我错了,在第二种情况下它不正确的 alpha 处理,它只是预先计算了图像,并将 alpha 应用于cavas的默认背景颜色。
【问题讨论】:
标签: java image awt hardware-acceleration