Create a BufferedImage from file and make it TYPE_INT_ARGB

后端 未结 3 703
醉酒成梦
醉酒成梦 2020-12-08 02:28

I have a PNG file with transparency that is loaded and stored in a BufferedImage. I need this BufferedImage to be of TYPE_INT_ARGB. Ho

相关标签:
3条回答
  • 2020-12-08 03:07
    try {
        File img = new File("somefile.png");
        BufferedImage image = ImageIO.read(img ); 
        System.out.println(image);
    } catch (IOException e) { 
        e.printStackTrace(); 
    }
    

    Example output for my image file:

    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
    

    You can run System.out.println(object); on just about any object and get some information about it.

    0 讨论(0)
  • 2020-12-08 03:21
    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();
    
    0 讨论(0)
  • 2020-12-08 03:22

    Create a BufferedImage from file and make it 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();
            }
        }
    }
    

    This paints a big blue streak across the top.

    If you want it ARGB, do it like this:

        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();
        }
    

    Open up MyFile.png, it has a red streak across the top.

    0 讨论(0)
提交回复
热议问题