使用java将jpg图像添加到一起

时间:2011-09-05 21:35:17

标签: java image graphics compilation bufferedimage

我正在尝试拍摄具有相同尺寸(30 * 30)的重复jpg图像并创建单个图像。像这样:

Image i = new BufferedImage(30, 30, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2 = (Graphics2D) i.getGraphics();
    if (this instanceof Node) {
        Image img;
        img = getImageFromFile(Node.icon);
        g2.drawImage(img, 0, 0, null);
    }
    if(this instanceof ForceNode){
        Image img;
        img = getImageFromFile(ForceNode.forceicon);
        g2.drawImage(img, 0, 0, null);
    }
    if(this instanceof TunnelNode){
        Image img;
        img = getImageFromFile(TunnelNode.tunnelicon);
        g2.drawImage(img, 0, 0, null);
    }
....

public Image getImageFromFile(File file) {
    Image image = null;
    try {
        image = ImageIO.read(file);
    } catch (IOException e) {
        Logger.getLogger(HackerGame.class.getName()).log(Level.SEVERE, null, e);
        return null;
    }
    return image;


}

我意识到G2D有一些问题不是绝对必要的,但我的问题是: 这些图像需要相互叠加以创建整个图像。图像的清除是整个图像的小区域,需要彼此叠加(不相邻)以创建实际图像。然而现在的问题是最后一个drawImage方法会覆盖整个图像,所以我留下最后一个“图像位”而不是我编译的图像。

我怀疑这是因为我的照片的白色区域没有被视为透明,但我如何解决这个问题。我接下来没有图像编码的经验,所以我有点试用和错误:) 无论如何帮助!

解决方案:

public void generateIcon() {
    BufferedImage i = new BufferedImage(30, 30, BufferedImage.TYPE_INT_ARGB);
    if (this instanceof Node) {
        i = compileImages(i, Node.icon);
    }
    if(this instanceof ForceNode){
        i = compileImages(i, ForceNode.forceicon);
    }
    if(this instanceof TunnelNode){
        i = compileImages(i, TunnelNode.tunnelicon);
    }
    if (this instanceof EntranceNode) {
        i = compileImages(i, EntranceNode.entranceicon);
    }
    if (this instanceof NetworkNode) {
        i = compileImages(i, NetworkNode.networkicon);
    }
    if(this instanceof DataNode){
        i = compileImages(i, DataNode.dataicon);
    }

    //if(this instanceof )


    nodeicon = i;
}

public BufferedImage compileImages(BufferedImage image, File f) {
    BufferedImage im = null;
    try {
        im = ImageIO.read(f);
        for(int i = 0 ; i<image.getWidth();i++){
            for(int j = 0 ; j<image.getHeight();j++){
                int rgb = im.getRGB(i, j);
                //System.out.println(i + " " + j + " " + rgb);
                if(!(rgb < 1 && rgb > -2)){
                    image.setRGB(i, j, rgb);
                    //System.out.println("Printing " + i + " " + j + " " + rgb);
                }
            }
        }
    } catch (IOException e) {
        Logger.getLogger(HackerGame.class.getName()).log(Level.SEVERE, null, e);
        return null;
    }
    return image;


}

1 个答案:

答案 0 :(得分:1)

迭代源图像的像素。如果它们白色(使用getRGB(x,y)进行比较),请将它们写入目标图像。