【问题标题】:Drawing two overlayed images绘制两个重叠的图像
【发布时间】:2012-11-26 23:01:14
【问题描述】:

我正在尝试绘制 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 的图像,仅绘制了第二张图像。

感谢任何帮助。

谢谢!

【问题讨论】:

    标签: java image draw


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2018-09-17
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多