如何在所有平台上使用硬件加速绘制图像?
Posted
技术标签:
【中文标题】如何在所有平台上使用硬件加速绘制图像?【英文标题】:How draw images with hardware acceleration on all platforms? 【发布时间】: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的默认背景颜色。
【问题讨论】:
【参考方案1】:System.getProperties().setProperty("sun.java2d.opengl", "true");
这个设置解决了加速问题,现在drawImage有0.004毫秒
而且 alpha 处理完全没有问题,我只是在同一个地方用 alpha 画了 1000 次相同的图像进行时间测试,它导致了如此丑陋的画面
【讨论】:
以上是关于如何在所有平台上使用硬件加速绘制图像?的主要内容,如果未能解决你的问题,请参考以下文章