绘制两个叠加的图像

时间:2012-11-26 12:29:18

标签: java image draw

我正在尝试绘制2张图片,一张在另一张图片之上。第1个图像是箭头(在最终图像中应该看起来像标题)。第1个图像(箭头)为32x32像素,而2英尺为24x24。

理想情况下,我想在第1个图像的右下角开始绘制第1个图像上方的第2个图像。

目前我正在使用此类代码

// load source images
        BufferedImage baseImage = ImageIO.read(new File(baseImg.getFileLocation()));
        BufferedImage backgroundImage = ImageIO.read(new File(backgroundImg.getFileLocation()));

        // create the new image, canvas size is the max. of both image sizes
        int w = Math.max(baseImage.getWidth(), backgroundImage.getWidth());
        int h = Math.max(baseImage.getHeight(), backgroundImage.getHeight());
        BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

        // paint both images, preserving the alpha channels
        Graphics g = combined.getGraphics();
        g.drawImage(baseImage, 0, 0, null);
        g.drawImage(backgroundImage, 0, 0, null);

        int index = baseImg.getFileLocation().lastIndexOf(".png");
        String newFileName = baseImg.getFileLocation().substring(0, index);
        // Save as new image
        ImageIO.write(combined, "PNG", new File(newFileName + "_combined.png"));

但这对我来说不太适用,因为最终结果是32x32图像,第二张图像仅被绘制。

感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

看起来这里的问题是你最后绘制32x32背景图像,这意味着它将打印在另一个图像的顶部,使得它看起来好像从未绘制过24x24图像。

如果你交换这两行,你应该看到两个图像。从:

g.drawImage(baseImage, 0, 0, null);
g.drawImage(backgroundImage, 0, 0, null);

为:

g.drawImage(backgroundImage, 0, 0, null);
g.drawImage(baseImage, 0, 0, null);


但是这会在左上角绘制24x24图像,你说你喜欢它在右下角。这可以通过一些基本的减法来完成:

g.drawImage(baseImage, w - baseImage.getWidth(), h - baseImage.getHeight(), null);