2009-04-20 2 views
0

Я играл с некоторыми функциями обработки изображений в Java, пытаясь наложить одно изображение поверх другого. Как так:Java: использование WritableRaster.setRect для наложения изображения?

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
flower
по этому вопросу: https://www.google.com/intl/en_ALL/images/logo.gif
alt text

продукт выглядит как: http://imgur.com/xnpfp.png
crappy image

Из примеров, которые я видел, это, по-видимому, соответствующий метод. Я пропустил шаг? Есть ли лучший способ справиться с этим? Спасибо за ваши ответы.

+0

Ваши изображения не отображаются для меня - Chrome на XP. –

+0

Я не мог понять, почему они тоже не появлялись, пока я не посмотрел и не обнаружил, что кто-то еще удалил их с моего поста. Я добавил ссылки для изображений, если это произойдет снова. Спасибо! – moshen

+0

Спасибо, кто приманил мой (дерьмо?) Код. (mmyers?) – moshen

ответ

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); 
    } 
}