标题解释了一切。假设我有以下代码:
BufferedImage image;
try {
image = ImageIO.read(new File(path));
}
catch (Exception e) {
e.printStackTrace();
}图像的类型总是BufferedImage.TYPE_INT_ARGB还是带有alpha通道的其他类型?(我正在使用Java 8 btw)
发布于 2014-12-09 03:20:53
从我的测试来看,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
56= BufferedImage.TYPE_4BYTE_ABGR
5= BufferedImage.TYPE_3BYTE_BGR
第一个图像具有透明度,而第二个图像没有透明度。
发布于 2014-12-09 10:43:27
简短回答:不。不总是这样。它可以是任何类型的。
更长的答案:ImageIO.read(...)只应该返回带有alpha的图像类型,如果图像读取有一个alpha通道,但是正如@MadProgrammer在他的评论中所说的,这确实是插件特有的。据我所知,大多数ImageReader插件将返回最“自然”的输入类型,即最接近输入文件的原生格式的插件。
但是,可以指定您想要的映像类型,甚至可以指定要加载到的目标映像。为此,您需要获得要读取的格式的ImageReader实例,并将类型或图像传递给ImageReadParam上的setDestination(...)或setDestinationType(...)方法。
https://stackoverflow.com/questions/27370845
复制相似问题