标题解释了这一切。 假设我有以下代码:
BufferedImage image;
try {
image = ImageIO.read(new File(path));
}
catch (Exception e) {
e.printStackTrace();
}
图片的类型是{@ 1}}还是带alpha通道的其他类型? (我使用Java 8顺便说一句)
答案 0 :(得分:1)
从我的测试中看,BufferedImage似乎适应你的图像。
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.net.URL;
public class BufferedImageTest {
public static void main(String[] args) {
try {
BufferedImage transparent = ImageIO.read(new URL("http://upload.wikimedia.org/wikipedia/commons/4/4a/Logo_2013_Google.png"));
System.out.println(transparent.getType());
BufferedImage solid = ImageIO.read(new URL("http://blacklabelsociety.com/home/wp-content/uploads/2014/01/spacer.jpg"));
System.out.println(solid.getType());
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出
6
5
6 = BufferedImage.TYPE_4BYTE_ABGR
5 = BufferedImage.TYPE_3BYTE_BGR
第一张图片有透明度,而第二张图片没有。
答案 1 :(得分:0)
简答:不。不总是。它可以是任何类型。
更长的回答:
如果读取的图像具有alpha通道,ImageIO.read(...)
应该只返回带alpha的图像类型,但正如@MadProgrammer在他的评论中所说,这是特定于插件的。我所知道的大多数ImageReader
插件都会返回最多的#34;自然"输入的类型,即最接近输入文件的本机格式的输入。
然而,可以指定所需的图像类型,甚至可以指定要加载的目标图像。为此,您需要获取要阅读的格式的ImageReader
实例,并将类型或图片传递给setDestination(...)
上的setDestinationType(...)
或ImageReadParam
方法