从文件创建BufferedImage并使其成为TYPE_INT_ARGB

use*_*734 32 java bufferedimage image-manipulation image argb

我有一个带有透明度的PNG文件,它被加载并存储在一个BufferedImage.我需要这BufferedImage是的TYPE_INT_ARGB.但是,当我使用getType()返回值时,0(TYPE_CUSTOM)而不是2(TYPE_INT_ARGB).

这是我加载的方式.png:

public File img = new File("imagen.png");

public BufferedImage buffImg = 
    new BufferedImage(240, 240, BufferedImage.TYPE_INT_ARGB);

try { 
    buffImg = ImageIO.read(img ); 
} 
catch (IOException e) { }

System.out.Println(buffImg.getType()); //Prints 0 instead of 2
Run Code Online (Sandbox Code Playgroud)

如何加载.png,保存BufferedImage并制作TYPE_INT_ARGB

Jef*_*rey 75

BufferedImage in = ImageIO.read(img);

BufferedImage newImage = new BufferedImage(
    in.getWidth(), in.getHeight(), BufferedImage.TYPE_INT_ARGB);

Graphics2D g = newImage.createGraphics();
g.drawImage(in, 0, 0, null);
g.dispose();
Run Code Online (Sandbox Code Playgroud)

  • @ user1319734,也许您想将此标记为已接受的答案? (17认同)
  • 这是非常低效的,并且随着图像尺寸的增加变得越来越不可行。 (2认同)

小智 6

try {
    File img = new File("somefile.png");
    BufferedImage image = ImageIO.read(img ); 
    System.out.println(image);
} catch (IOException e) { 
    e.printStackTrace(); 
}
Run Code Online (Sandbox Code Playgroud)

我的图像文件的示例输出:

BufferedImage@5d391d: type = 5 ColorModel: #pixelBits = 24 
numComponents = 3 color 
space = java.awt.color.ICC_ColorSpace@50a649 
transparency = 1 
has alpha = false 
isAlphaPre = false 
ByteInterleavedRaster: 
width = 800 
height = 600 
#numDataElements 3 
dataOff[0] = 2
Run Code Online (Sandbox Code Playgroud)

您可以运行System.out.println(object); 几乎任何对象,并获得有关它的一些信息.