java - 绘制两个重叠的图像

标签 java image draw

我正在尝试绘制 2 个图像,一个在另一个之上。第一个图像是一个箭头(在最终图像中应显示为标题)。第一个图像(箭头)为 32x32 像素,而第二个图像为 24x24。

理想情况下,我想从第一个图像的右下角开始在第一个图像的顶部绘制第二个图像。

目前我正在使用这样的代码

// 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 图像,仅绘制第二个图像。

感谢任何帮助。

谢谢!

最佳答案

看起来这里的问题是您最后绘制了 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);

关于java - 绘制两个重叠的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13564869/

相关文章:

java - 如何覆盖jar文件中的方法?

java - gradle compileJava错误: package org. junit.jupiter.api不存在

iphone - 使用 iPhone sdk 从 URL 加载 ImageView 中的图像?

C#/WPF图像处理问题

python - 如何在pygame中为绘图设置动画(运动)

java - 无法在java中调用方法

java - 使用 java.BufferedReader 删除文本文件中的一行

ios - Swift:在 UITable-View 中加载图像

c# - 绘制船舶的二维航迹。新华社

ios - 我想在 UIView 上绘制像苹果形状这样的自定义形状