简体   繁体   中英

How to convert BufferedImage(RGB) to BufferedImage(ARGB or RGBA)?

I'm trying to convert the RGB image produced by the Robot.createScreenCapture function to ARGB image. My goal is to set transparency when the pixel haven't changed between two images but I get black color. As shown in the below image.

For example BufferedImage as created as below:

 BufferedImage currImage = robot.createScreenCapture(new Rectangle(x, y, width,height));

The following function is intended to create ARGB pixel.

private BufferedImage bufferedImagesEqual(BufferedImage prevImage,
        BufferedImage currImage) {
    boolean changed = false;
    BufferedImage imagePart = new BufferedImage(currImage.getWidth(), currImage.getHeight(), BufferedImage.TYPE_INT_ARGB);
    if (prevImage.getWidth() == currImage.getWidth()
            && prevImage.getHeight() == currImage.getHeight()) {

        for (int x = 0; x < currImage.getWidth(); x++) {
            for (int y = 0; y < prevImage.getHeight(); y++) {
                 int argb =  currImage.getRGB(x, y);
                if (prevImage.getRGB(x, y) != currImage.getRGB(x, y)){
                //  return false;
                    //  currImage.setRGB(x, y, 0);
                    if(!changed){
                        changed = true;
                    }
                }
                else {
                    imagePart.setRGB(x, y, 0xff000000);
                }
            }
        }
    } else {
        return imagePart;
    }
    if(changed){
        return imagePart;
    }else {
        return null;
    }
}

Starting with the before and after images...

之前后

By using new Color(0, 0, 0, 0) instead of 0xff000000 (and painting SOMETHING when the pixels as equal), I get

产量

Using...

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class ConvertBuffer {

    public static void main(String[] args) {
        try {
            BufferedImage before = ImageIO.read(new File("/Before.jpg"));
            BufferedImage after = ImageIO.read(new File("/After.jpg"));

            BufferedImage result = bufferedImagesEqual(before, after);

            JLabel label = new JLabel(new ImageIcon(result));
            label.setOpaque(true);
            label.setBackground(Color.BLUE);
            JOptionPane.showMessageDialog(null, label);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static BufferedImage bufferedImagesEqual(BufferedImage prevImage,
                    BufferedImage currImage) {
        boolean changed = false;
        BufferedImage imagePart = new BufferedImage(currImage.getWidth(), currImage.getHeight(), BufferedImage.TYPE_INT_ARGB);
        if (prevImage.getWidth() == currImage.getWidth()
                        && prevImage.getHeight() == currImage.getHeight()) {

            for (int x = 0; x < currImage.getWidth(); x++) {
                for (int y = 0; y < prevImage.getHeight(); y++) {
                    if (prevImage.getRGB(x, y) != currImage.getRGB(x, y)) {
                //  return false;
                        //  currImage.setRGB(x, y, 0);
                        if (!changed) {
                            changed = true;
                        }
                        imagePart.setRGB(x, y, currImage.getRGB(x, y));
                    } else {
                        imagePart.setRGB(x, y, new Color(0, 0, 0, 0).getRGB());
                    }
                }
            }
        } else {
            return imagePart;
        }
        if (changed) {
            return imagePart;
        } else {
            return null;
        }
    }

}

So, unless you have an example image to play with, this is the best we can do...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM