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, 0, w, h, (int[]) null); int[] dstBuffer = new int[w * h]; for (int i=0; i> 24) & 0xff; dstBuffer[i] = a | a << 8 | a << 16; } return Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(w, h, pix, 0, w)); } 

我不相信有一个方法调用来做到这一点; 您必须获取所有图像数据并屏蔽每个像素的字母字节。 因此,例如,使用getRGB()来获取图像的ARGB像素。 最重要的字节是alpha值。 因此,对于数组中的每个像素,您都可以从getRGB()获得,

 int alpha = (pixel >> 24) & 0xFF; 

您可以从BufferedImage中获取Raster ,然后创建一个子 Raster,它只包含您感兴趣的波段( bandList参数)。 从这个子栅格中,您可以使用合适的ColorModel创建一个新的BufferedImage ,它只包含灰度aplpha掩码。

以这种方式执行此操作而不是手动迭代像素的好处是运行时有机会了解您正在做什么,因此可以通过利用硬件function来加速。 老实说,我怀疑它会加速现有的JVM,但谁知道未来会带来什么?