2009-04-20 28 views
0

Ich habe mit einigen der Imaging-Funktionen in Java gespielt und versucht, ein Bild über ein anderes zu überlagern. Wie so:Java: Verwenden Sie WriteableRaster.setRect, um ein Bild zu überlagern?

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

Im Grunde war ich versucht, dieses zu überlagern: https://upload.wikimedia.org/wikipedia/commons/e/e2/Sunflower_as_gif_small.gif
flower
dazu: https://www.google.com/intl/en_ALL/images/logo.gif
alt text

Das Produkt erscheint als: http://imgur.com/xnpfp.png
crappy image

Aus den Beispielen, die ich gesehen habe, scheint dies die geeignete Methode zu sein. Vermisse ich einen Schritt? Gibt es einen besseren Weg, damit umzugehen? Danke für deine Antworten.

+0

Ihre Bilder erscheinen nicht für mich - Chrome auf XP. –

+0

Ich konnte nicht herausfinden, warum sie auch nicht auftauchten, bis ich sah, dass jemand anderes sie von meinem Posten entfernt hat. Ich habe Links für die Bilder hinzugefügt, falls dies erneut passiert. Danke! – moshen

+0

Danke an jeden, der meinen (Mist-) Code vorbereitet hat. (mmyers?) – moshen

Antwort

1

Scheint, dass ich in all den falschen Wegen darüber ging. Diese auf der Sun forums umrissene Lösung funktioniert einwandfrei (hier kopiert):

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