簡體   English   中英

ImageIO.read()是否總是返回具有透明性的BufferedImage?

[英]Does ImageIO.read() always return BufferedImage with transparency?

標題說明了一切。 可以說我有以下代碼:

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

圖像的類型將始終是BufferedImage.TYPE_INT_ARGB還是具有alpha通道的其他類型? (我正在使用Java 8 btw)

根據我的測試,看來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

第一張圖像具有透明度,而第二張圖像沒有透明度。

簡短答案:不,並非總是如此。 它可以是任何類型。

更長的答案:如果讀取的圖像具有alpha通道,則ImageIO.read(...)僅應返回帶有alpha的圖像類型,但是正如@MadProgrammer在其評論中所說,這實際上是特定於插件的。 據我所知,大多數ImageReader插件將為輸入返回最“自然”的類型,即與輸入文件的本機格式最接近的類型。

但是,可以指定所需的圖像類型,甚至可以指定要加載到的目標圖像。 要做到這一點,你需要獲得ImageReader你想要閱讀的格式實例,並傳遞給類型或圖像setDestination(...)setDestinationType(...)的方法ImageReadParam

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM