我已经用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的默认背景颜色。
发布于 2017-06-27 16:37:17
System.getProperties().setProperty("sun.java2d.opengl", "true"); 此设置解决了加速问题,现在drawImage有0.004毫秒
而且alpha处理根本没有问题,我只是在同一个地方用alpha绘制了1000次相同的图像进行时间测试,结果造成了如此丑陋的图像。
https://stackoverflow.com/questions/44756784
复制相似问题