gpt4 book ai didi

Java 反转图像 Alpha

转载 作者:行者123 更新时间:2023-12-01 23:47:07 25 4
gpt4 key购买 nike

我遇到了一种情况,我需要反转 VolatileImage 的 Alpha channel

我当前的实现是显而易见的,但非常慢;

public BufferedImage invertImage(VolatileImage v) {
BufferedImage b = new BufferedImage(v.getWidth(), v.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
Graphics g = b.getGraphics();
g.drawImage(v, 0, 0, null);
for(int i = 0; i < b.getWidth(); i++) {
for(int(j = 0; j < b.getHeight(); j++) {
Color c = new Color(b.getRGB(i, j, true));
c = new Color(c.getRed(), c.getGreen(), c.getBlue(), 255 - c.getAlpha());
b.setRGB(i, j, c.getRGB());
}
}
return b;
}

这工作正常,但速度慢得令人痛苦。我有大图像并且需要速度快。我搞乱了 AlphaComposite但无济于事 - 据我所知,这并不是一个真正的堆肥问题。

鉴于255 - x相当于 x & 0xff对于 0 <= x < 256 ,我能不能以某种方式对 alpha channel 进行集体异或运算?

最佳答案

经过大量谷歌搜索后,我发现 DataBuffer 类被用作 BufferedImages 的映射:

DataBufferByte buf = (DataBufferByte)b.getRaster().getDataBuffer();
byte[] values = buf.getData();
for(int i = 0; i < values.length; i += 4) values[i] = (byte)(values[i] ^ 0xff);

这会反转 BufferedImage 的值(您不需要将其绘制回来,更改数组值会更改缓冲图像本身)。

我的测试表明,此方法比 jazzbassrob 的改进快约 20 倍,而 jazzbassrob 的改进比我原来的方法快约 1.5 倍。

关于Java 反转图像 Alpha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16857894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com