有没有人有办法在Java中存储透明度为{B}的BufferedImage
?最好使用ImageIO
API。
出于某种原因,即使the BMP has supported alpha channel since, at least, Win95,我也无法以ARGB(BGRA)格式编写BMP。但是,我可以轻松地将相同的图像写为PNG。它也可以很好地存储没有alpha的图像,例如TYPE_INT_RGB
或TYPE_3BYTE_BGR
。
请考虑以下代码段:
public static void main(String[] args) throws IOException {
if (!ImageIO.write(new BufferedImage(300, 200, BufferedImage.TYPE_INT_ARGB), "BMP", new File("foo.bmp"))) {
System.err.println("Couldn't write BMP!");
}
if (!ImageIO.write(new BufferedImage(300, 200, BufferedImage.TYPE_INT_ARGB), "PNG", new File("foo.png"))) {
System.err.println("Couldn't write PNG!");
}
}
输出:
Couldn't write BMP!
答案 0 :(得分:1)
public boolean canEncodeImage(ImageTypeSpecifier type) {
...
if (!(numBands == 1 || numBands == 3))
return false;
我担心Java不支持32位BMP。你必须自己编写或找到一个现有的库(想象一下我不知道ImageJ是否支持BMP)。维基百科非常详细地介绍了文件格式,它看起来非常简单,甚至提供了32位BMP的完整逐字段示例。