如何在所有平台上使用硬件加速来绘制图像?

时间:2017-06-26 09:38:03

标签: java image awt hardware-acceleration

我用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毫秒):

invalid alpha

当我绘制VolatileImage时,它会处理alpha并加速(0.03ms):

valid aplpha

但它在Windows下。在MacOS下我看到不同的结果。对于BufferedImage,它不处理alpha,而是加速,对于VolatileImage,它正确处理alpha,但不加速。 (或者两者都没有加速,只是BufferedImage的软件处理速度要快得多)。

问题 - 如何使用正确的alpha处理和所有平台上的加速来正确绘制图像。

PS。 img2.setAccelerationPriority(1)没有任何效果。

PPS。我错了,它在第二种情况下不正确的alpha处理,它只是预先计算的图像与alpha应用于cavas的默认背景颜色。

1 个答案:

答案 0 :(得分:0)

System.getProperties().setProperty("sun.java2d.opengl", "true");        

此设置解决了加速问题,现在绘制了0.004毫秒的drawImage

根本没有alpha处理的问题,我只是在同一个地方用相同的地方绘制1000次相同的图像进行时间测试,它造成了如此丑陋的画面