Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ImageIO.read()是否总是返回具有透明度的BuffereImage?_Java_Image_Transparency_Bufferedimage_Javax.imageio - Fatal编程技术网

Java ImageIO.read()是否总是返回具有透明度的BuffereImage?

Java ImageIO.read()是否总是返回具有透明度的BuffereImage?,java,image,transparency,bufferedimage,javax.imageio,Java,Image,Transparency,Bufferedimage,Javax.imageio,标题解释了这一切。 假设我有以下代码: BufferedImage image; try { image = ImageIO.read(new File(path)); } catch (Exception e) { e.printStackTrace(); } 图像的类型总是BufferedImage.type\u INT\u ARGB还是其他带有alpha通道的类型?(顺便说一句,我使用的是Java 8)根据我的测试,BuffereImage似乎适合您拥有的映像 impor

标题解释了这一切。 假设我有以下代码:

BufferedImage image;
try {
    image = ImageIO.read(new File(path));
}
catch (Exception e) {
    e.printStackTrace();
}

图像的类型总是
BufferedImage.type\u INT\u ARGB
还是其他带有alpha通道的类型?(顺便说一句,我使用的是Java 8)

根据我的测试,BuffereImage似乎适合您拥有的映像

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=buffereImage.TYPE_4BYTE_ABGR

5=BuffereImage.TYPE_3BYTE_BGR


第一张图片有透明度,而第二张没有。

简短回答:没有。不总是这样。它可以是任何类型

详细回答:
ImageIO.read(…)
应该只返回带有alpha的图像类型,如果读取的图像具有alpha通道,但正如@MadProgrammer在其评论中所说,这实际上是特定于插件的。据我所知,大多数
ImageReader
插件都会返回最“自然”的输入类型,即最接近输入文件本机格式的类型


但是,可以指定所需图像的类型,甚至可以指定要加载到的目标图像。要做到这一点,您需要为您想要读取的格式获取一个
ImageReader
实例,并将类型或图像传递到
setDestination(…)
setDestinationType(…)
方法上的
ImageReadParam

理论上,如果图像支持透明度,它应该只返回具有透明度的图像,但这将取决于用于加载映像的插件……这取决于插件的实现,并且可能在JVM之间或根据用户安装的内容进行更改。主要的问题是BuffereImage会进行调整,而不是适应什么。:)不太可能,
BufferedImage
是它创建的结果。您可以轻松地将不透明图像加载到不会改变其类型的
BuffereImage
中…这与问题的上下文有关,根据他提供的代码,它会适应。但适应的不是
BuffereImage
,这是用于加载该类型图像的插件如何决定创建哪种类型的
buffereImage
。因此,改变插件,改变结果。。。