如何解决Java:从BufferedImage中提取Alpha通道
| 我想从缓冲图像中提取Alpha通道,并使用灰度将其绘制在单独的图像中。 (就像在Photoshop中显示的一样)解决方法
未测试,但包含要点。
public Image alpha2gray(BufferedImage src) {
if (src.getType() != BufferedImage.TYPE_INT_ARGB)
throw new RuntimeException(\"Wrong image type.\");
int w = src.getWidth();
int h = src.getHeight();
int[] srcBuffer = src.getData().getPixels(0,w,h,(int[]) null);
int[] dstBuffer = new int[w * h];
for (int i=0; i<w*h; i++) {
int a = (srcBuffer[i] >> 24) & 0xff;
dstBuffer[i] = a | a << 8 | a << 16;
}
return Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(w,pix,w));
}
, 我不相信有一个方法调用可以做到这一点。您将必须获取所有图像数据并屏蔽每个像素的alpha字节。因此,例如,使用getRGB()
获取图像的ARGB像素。最高有效字节是alpha值。因此,对于数组中的每个像素,您从ѭ1得出
int alpha = (pixel >> 24) & 0xFF;
, 您可以从BufferedImage中获取Raster,然后创建该子Raster的子Raster,其中仅包含您感兴趣的波段(“ 4”参数)。从这个子栅格中,您可以创建一个带有合适的ColorModel
的新BufferedImage,其中仅包含灰度的aplpha蒙版。
以这种方式进行操作而不是手动遍历像素的好处是,运行时有机会了解所执行的操作,因此可以通过利用硬件功能来加快执行速度。老实说,我怀疑当前的JVM是否会加速它,但是谁知道未来会带来什么呢?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。