我想從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