Swing Bilder über andere Bilder laden

lala84

Mitglied
Heyho,

ich habe folgendes Problem bei dem ich aktuell nicht weiter weiß:

Ich lese ein BufferedImage ein, wandle es in ein Graphics2D um, damit ich darin zeichnen kann.
Nun will ich in dieses ein weiteres kleines Bildchen=Icon laden, sprich ich hab ein 1000x1000 großes Hauptbild, und ein 10x10 großes Icon, welches ich mit drawImage zeichnen kann.

Jedoch hab ich nun das Problem, dass beim einfügen des Icons dessen Farben verblassen bzw. mit dem Bild im Hintergrund (siehe Beispiel; das Lidl Symbol sollte so aussehen)

Der folgende Coeausschnitt zeigt den Code (bild, bufferedimage1 sei "http://tile.openstreetmap.org/6/34/20.png" und sind global)
Java:
public void test(){
	BufferedImage lidl = null;
	try {
		lidl = ImageIO.read(new URL("http://a0.twimg.com/profile_images/446543303/Lidl-Logo_RGB_normal.png"));
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	BufferedImage bufImg = new BufferedImage(256, 256, BufferedImage.TYPE_INT_RGB);
	bufImg = bufferedimage1;
		
	Graphics2D g2 = (Graphics2D) bufImg.getGraphics();
	g2.setBackground(Color.white);    
	g2.drawImage(lidl, 100, 100, this);
	g2.dispose();
	this.bild.setIcon(new ImageIcon(bufImg));
}
 
Dein Hintergrundbild ist ein PNG Image mit einer Farbpalette (8 Bit). Da ist es ganz egal was du bei bufImg im Konstruktor für Parameter angibst, durch die Anweisung
Code:
bufImg = bufferedimage1;
ist bufImg lediglich eine weitere Referenz auf bufferedimage1, und hat daher auch dieselbe beschränkte Farbpalette. Und wenn in dieser Farbpalette kein Lidl-gelb vorkommt, dann kann da natürlich auch kein Lidl-gelb ins Bild gezeichnet werden.
Lösungen dafür können sein: Konvertiere das PNG Image ins Truecolorformat oder schreibe deine Methode so um das sie die Konvertierung übernimmt.
 
Zuletzt bearbeitet von einem Moderator:
Ist es notwendig, daß Du in dem größeren Bild rum malst? Wenn Du die Bilder einfach übereinander zeichnest gibt es keine Probleme.
 
Dein Hintergrundbild ist ein PNG Image mit einer Farbpalette (8 Bit). Da ist es ganz egal was du bei bufImg im Konstruktor für Parameter angibst, durch die Anweisung
Code:
bufImg = bufferedimage1;
ist bufImg lediglich eine weitere Referenz auf bufferedimage1, und hat daher auch dieselbe beschränkte Farbpalette. Und wenn in dieser Farbpalette kein Lidl-gelb vorkommt, dann kann da natürlich auch kein Lidl-gelb ins Bild gezeichnet werden.
Lösungen dafür können sein: Konvertiere das PNG Image ins Truecolorformat oder schreibe deine Methode so um das sie die Konvertierung übernimmt.

Danke, ich dachte mir schon etwas in die Richtung.

mfg
 

Zurück
Oben