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

我有一个透明的PNG文件加载并存储在BufferedImage 。 我需要这个BufferedImageTYPE_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 

如何加载.png,保存在BufferedImage并使其成为TYPE_INT_ARGB

 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(); 
 try { File img = new File("somefile.png"); BufferedImage image = ImageIO.read(img ); System.out.println(image); } catch (IOException e) { e.printStackTrace(); } 

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

 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 

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

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

 import java.io.*; import java.awt.image.*; import javax.imageio.*; public class Main{ public static void main(String args[]){ try{ BufferedImage img = new BufferedImage( 500, 500, BufferedImage.TYPE_INT_RGB ); File f = new File("MyFile.png"); int r = 5; int g = 25; int b = 255; int col = (r << 16) | (g << 8) | b; for(int x = 0; x < 500; x++){ for(int y = 20; y < 300; y++){ img.setRGB(x, y, col); } } ImageIO.write(img, "PNG", f); } catch(Exception e){ e.printStackTrace(); } } } 

这在顶部描绘出一条蓝色的大条纹。

如果你想要ARGB,那就这样做:

  try{ BufferedImage img = new BufferedImage( 500, 500, BufferedImage.TYPE_INT_ARGB ); File f = new File("MyFile.png"); int r = 255; int g = 10; int b = 57; int alpha = 255; int col = (alpha << 24) | (r << 16) | (g << 8) | b; for(int x = 0; x < 500; x++){ for(int y = 20; y < 30; y++){ img.setRGB(x, y, col); } } ImageIO.write(img, "PNG", f); } catch(Exception e){ e.printStackTrace(); } 

打开MyFile.png,它顶部有一条红色条纹。