2 Bilder übereinander legen

Assassins88

Mitglied
Hi,
Folgendes: Ich hab 2 Bilder und würde gerne Bild 2 auf Bild 1 legen und das was bei rauskommt abspeichern sodass ich Bild 3 habe was aus Bild 1 und Bild 2 besteht.

Die Bilder sollen währenddessen nicht angezeigt werden.

Kennt da wer ne Möglichkeit, wie ich das realisieren kann?
 
naja da stellt sich die Frage wie du dir das vostelllst. Wenn du ein schwarzes Bild hast und ein weißes, was soll denn dann das Ergebnis sein?
Ich nehme mal an du hast transparente Bilder oder zumindest das was du oben drauf legen willst ist zum Teil transparent. Hast du nur Transparenz oder hast du einen Alphakanal mit werten von 0-255?
Im Prinzip musst du ja nur die Pixel mal einander im richtigen Verhältnis mischen. Also nehmen wir mal an, dass untere Bild ist nicht transparent und das oben darüber hat verschiedene Transparenzen. Dann nimmst du einfach den rot wert des ersten Pixel vom oberen Bild * dem Alphawert / 255 und addierst den rot wert vom Pixel des Bildes darunter * 255 - dem Alphawert des Pixels vom Bild darüber / 255. das machst du mit rot, grün und blau von allen Pixeln und setzt den alpha jeweils auf 255.
Wenn das Ergebnisbild selber auch noch transparent sein muss, dann wird es entsprechend komplizierter.

Gruß

Claus
 
naja da stellt sich die Frage wie du dir das vostelllst. Wenn du ein schwarzes Bild hast und ein weißes, was soll denn dann das Ergebnis sein?

Ich hab ein Bild mit Inhalt und eins, was Transparent ist und nur unten link ein Text steht.

Ich habs jetzt damit versucht:
Java:
allImages.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
          allImages.drawImage(Bild1, 0, 0, Bild1.getWidth(), Bild1.getHeight(), null);
          allImages.drawImage(Bild2, 0, 0, Bild2.getWidth(), Bild2.getHeight(), null);
          allImages.dispose();
       
          try {
              ImageIO.write((RenderedImage) allImages, "png", new File(CombinedImagesFileDestPath));
           
          } catch (IOException e) {
              e.printStackTrace();
           
          }

Leider bekomme ich ne NullPointerException.
 
Mhm, toll, hier kann man wohl nur ne bestimmte Zeit lang Beiträge bearbeiten. Naja egal, dann mach ich halt nen doppel Post.

So, hab es jetzt so gemacht (ist die ganze Klasse). Die 3 Punkte jeweils am Anfang und am Ende bedeuten nur das da noch Code ist, der aber dafür nicht relevant ist. 🙂

Java:
public class ImageManipulationTimer {
  
       public BufferedImage imageOnTimer;
       public BufferedImage procImageOnTimer;
       public Graphics2D allImages;
       public BufferedImage procImageOnClientJoin;
      
       public static String FileDestPathOnClientJoin;
       public static String FileSrcPathOnTimer;
       public static String FileDestPathOnTimer;
       public static String CombinedImagesFileDestPath;

       public String adminOnline;
       public Integer userOnlineInt;
       public String topVoter;
       public Double serverPingDouble;
       public Long uptimeServerLong;
       public String serverDate;
      
        public void main(){
        
...

          BufferedImage newImg = new BufferedImage(485, 240, BufferedImage.TYPE_INT_RGB);
          Graphics2D allImages = newImg.createGraphics();
          allImages.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
          allImages.drawImage(procImageOnClientJoin, 0, 0, procImageOnClientJoin.getWidth(), procImageOnClientJoin.getHeight(), null);
          allImages.drawImage(imageOnTimer, 0, 0, imageOnTimer.getWidth(), imageOnTimer.getHeight(), null);
        
          try {
              ImageIO.write((RenderedImage) newImg, "png", new File(CombinedImagesFileDestPath));
            
          } catch (IOException e) {
              e.printStackTrace();
            
          }
       }
...
    }

Jetzt hab ich zwar keine Exception mehr aber er speichert mir nur das erste Bild und nicht alle 2 zusammen (hatte Google gefragt und mehrere Ergebnisse waren mit der Möglichkeit). Irgendwie check ich das nicht.
 

Zurück
Oben