【问题标题】:Java: using WritableRaster.setRect to superimpose an image?Java:使用 WritableRaster.setRect 叠加图像?
【发布时间】:2009-11-14 11:33:16
【问题描述】:

我一直在使用 Java 中的一些成像功能,试图将一张图像叠加在另一张图像上。像这样:

BufferedImage background = javax.imageio.ImageIO.read(
    new ByteArrayInputStream(getDataFromUrl(
        "https://www.google.com/intl/en_ALL/images/logo.gif"
    ))
);
BufferedImage foreground = javax.imageio.ImageIO.read(
    new ByteArrayInputStream(getDataFromUrl(
        "https://upload.wikimedia.org/wikipedia/commons/e/e2/Sunflower_as_gif_small.gif"
    ))
);

WritableRaster backgroundRaster = background.getRaster();
Raster foregroundRaster = foreground.getRaster();

backgroundRaster.setRect(foregroundRaster);

基本上,我试图叠加这个:https://upload.wikimedia.org/wikipedia/commons/e/e2/Sunflower_as_gif_small.gif

对此:https://www.google.com/intl/en_ALL/images/logo.gif


产品显示为:http://imgur.com/xnpfp.png


从我看到的例子来看,这似乎是合适的方法。我错过了一步吗?有没有更好的方法来处理这个?感谢您的回复。

【问题讨论】:

  • 你的图片不显示给我 - XP 上的 Chrome。
  • 我无法弄清楚为什么它们也没有出现,直到我查看并发现其他人从我的帖子中删除了它们。我添加了图像的链接,以防再次发生这种情况。谢谢!
  • 感谢美化我(废话?)代码的人。 (迈耶斯?)
  • 在编辑历史中,列出的每个修订版都有图像,所以我不知道为什么它们有一段时间没有出现。是的,我确实格式化了你的代码(如果我能帮忙的话,我不喜欢滚动到一边)。 :)
  • 啊,我明白了。我之前看到的只是“___删除了24个字符”。我没有意识到我可以检查它。当我预览帖子时,一切看起来都很好,但有一段时间后,图像根本就不存在。

标签: java image image-manipulation raster


【解决方案1】:

似乎我以所有错误的方式处理这件事。 Sun forums 上概述的此解决方案完美运行(复制到此处):

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;

class TwoBecomeOne {
    public static void main(String[] args) throws IOException {
        BufferedImage large = ImageIO.read(new File("images/tiger.jpg"));
        BufferedImage small = ImageIO.read(new File("images/bclynx.jpg"));
        int w = large.getWidth();
        int h = large.getHeight();
        int type = BufferedImage.TYPE_INT_RGB;
        BufferedImage image = new BufferedImage(w, h, type);
        Graphics2D g2 = image.createGraphics();
        g2.drawImage(large, 0, 0, null);
        g2.drawImage(small, 10, 10, null);
        g2.dispose();
        ImageIO.write(image, "jpg", new File("twoInOne.jpg"));
        JOptionPane.showMessageDialog(null, new ImageIcon(image), "",
                                      JOptionPane.PLAIN_MESSAGE);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-23
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多