我想从bufferedimage中提取Alpha通道,并使用灰度在单独的图像中绘制它。 (喜欢它显示在Photoshop中)Java:从BufferedImage中提取Alpha通道
回答
我不认为有一个方法调用来做到这一点;您将不得不获取所有图像数据并遮盖每个像素的alpha字节。例如,使用getRGB()
来获取图像的ARGB像素。最重要的字节是阿尔法值。所以你从getRGB()
获得阵列中的每个像素,
int alpha = (pixel >> 24) & 0xFF;
你可以grab the Raster从BufferedImage中,然后create a child这一个只包含你感兴趣(该bandList
参数)乐队的光栅。从这个子栅格中,您可以创建一个new BufferedImage,并带有一个合适的ColorModel
,它只包含灰度aplpha掩码。
这样做而不是手动迭代像素的好处是,运行时有机会了解您正在做什么,因此可以通过利用硬件功能加速此。老实说,我怀疑它会加速与目前的JVM,但谁知道未来会带来什么?
未经测试,但包含要点。
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<w*h; i++) {
int a = (srcBuffer[i] >> 24) & 0xff;
dstBuffer[i] = a | a << 8 | a << 16;
}
return Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(w, h, pix, 0, w));
}
我认为工作中的转变需要转向另一种方式? 'a |一个<< 8 | a << 16' – 2015-03-31 17:56:33
@AustinHyde先生,这是绝对正确的。 – vbence 2015-03-31 18:20:16
这不会编译。 Line to fix: 'int [] srcBuffer = src.getData()。getPixels(0,0,w,h,(int [])null);' – 2017-02-21 18:08:15
- 1. BufferedImage从其他BufferedImage设置alpha
- 2. 如何使用Pillow从图像中提取Alpha通道
- 3. 在Java中设置BufferedImage alpha掩码
- 4. 从UIImage矩形获取alpha通道
- 5. BufferedImage中的通道顺序?
- 6. BufferedImage的反向alpha
- 7. 从ListView中删除Alpha通道ConvertView
- 8. 从UIImage中删除alpha通道
- 9. 如何使用PHP Gmagick从PNG文件中提取alpha和其他通道?
- 10. 如何在J2ME中从PNG中读取原始alpha通道?
- 11. 如何从java中的BufferedImage获取PlannerImage?
- 12. Java如何处理alpha通道?
- 13. 24位Alpha通道中BASE64_ENCODE
- 14. 拼合alpha通道中GGPLOT2
- 15. DeviceContext(HDC)中的Alpha通道
- 16. Alpha通道模糊
- 17. 我可以通过alpha通道从图像获取CGPath吗?
- 18. 从图像中提取RGB通道
- 19. 使用Alpha通道获取CGPath图像
- 20. CGFX着色器从alpha通道
- 21. 如何找到BufferedImage在Java中的Alpha位置?
- 22. 清除NSImage的alpha通道
- 23. 模糊QImage alpha通道
- 24. StretchBlt和过滤alpha通道
- 25. Canvas toDataURL不带alpha通道
- 26. php gd替代alpha通道?
- 27. OpenGL ES 2.0 PNG alpha通道
- 28. alpha通道如何为-1?
- 29. 从线性PCM提取音频通道
- 30. OpenGL着色器中的Alpha通道
好的,谢谢。我如何屏蔽掉一个像素的alpha字节? – clamp 2011-05-30 12:59:26
增加了一些细节。 – 2011-05-30 13:06:34
我认为这是可能的,没有手动循环的像素可能导致更好的性能在某些平台上,看到我的答案。 – Waldheinz 2011-05-30 13:11:17