BufferedImage toString() überschreiben

Major_Sauce

Bekanntes Mitglied
Guten Abend,

ich muss gerade ein BufferedImage laden, mache ich über ImageIO.read(file), und dann wollte ich eigentlich die toString()-Methode des Images überschreiben.
Wenn ich ein eigenes BuffereImage erstellen würde, mit new BufferedImage(){}, könnte ich die toString()-Methode problemlos überschreiben, aber ist dies auch noch nachträglich möglich, denn das BufferedImage wird mir ja einfach von der ImageIO übergeben :bahnhof: ?
Wäre schön wenn mir jemand sagen kann ob ich im Nachhinein noch Methoden überschreiben kann.

mfg Major_Sauce
 
Im Nachhinein geht sowas nicht, aber du könntest dir eine Wrapperklasse schreiben oder natürlich eine Utilityfunktion die dir das löst.
 
Danke für die schnelle Antwort :toll:

Finde es schade dass man nicht im nachhinein Methoden einfach überschreiben kann.

Naja, ich habe das jetzt mal anders gelöst, einfach ne neue Class erstellt die ein BufferedImage und einen String enthält, dann die toString()-Methode dieser classe überschrieben und voila, es funktioniert. Schade nur dass ich nun nicht direkt das BufferedImage verwenden kann sondern immer den Umweg über die neue Klasse gehen muss...

mfg Major_Sauce
 
Das ganze kannst du mit solch einer Klasse lösen:

Java:
public class ChildImage extends BufferedImage
{
	public ChildImage(BufferedImage img)
	{
		super(img.getColorModel(), img.getRaster(), img.isAlphaPremultiplied(), ChildImage.getPropertiesOfBufferedImage(img));
	}

	public static Hashtable<String, Object> getPropertiesOfBufferedImage(BufferedImage img)
	{
		Hashtable<String, Object> properties = new Hashtable<>();
		String[] propertyNames = img.getPropertyNames();
		if (propertyNames == null)
			properties = null;
		else
		{
			for (String name : propertyNames)
			{
				properties.put(name, img.getProperty(name));
			}
		}
		return properties;
	}

	@Override
	public String toString()
	{
		// dein Code
		return "";
	}
}
 
Zuletzt bearbeitet:
Dankeschön 🙂
Noch eine kleine Frage:
Ich versuche gerade ein BufferedImage in eine png zu schreiben, funktioniert, aber das bild wird immer verändert, da ist wohl die Kantenglättung schuld dran, sieht zumindest so aus.
Ich male erst ein paar kleine bilder auf ein großes und das große soll dann in eine png geschrieben werden.
Nun habe ich in dem Teil, wo die kleinen Bilder auf das große gemalt werden, schon durch RenderingHints das Antialiasing ausgemacht. Leider scheint es mir, dass die ImageIO beim schreiben in eine Datei die Kanten glättet, ist zumindest die einzige möglichkeit die ich so sehe.
Weiß jemand wo das herkommen könnte oder wie man das umgehen könnte ?

Hier noch ein wenig Code:

Java:
	public static BufferedImage generateSprite(BufferedImage[] images){
		int width = images[0].getWidth();
		int height = images[0].getHeight();
		BufferedImage spriteSheet = new BufferedImage(width * images.length, height, BufferedImage.TYPE_INT_RGB);
		Graphics2D g = (Graphics2D)spriteSheet.getGraphics();
		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
		g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
		for(int i = 0; i < images.length; i++){
			g.drawImage(images[i], i * width, 0, null);
		}
		return spriteSheet;
	}

        //So wird das ganze aufgerufen
	BufferedImage spriteSheet = SpriteCreator.generateSprite(images);
	ImageIO.write(spriteSheet, "jpg", out_sprite);
 
Alles klar, hat sich erledigt.
Meine Schuld, war zu blöd jpg und png zu unterscheiden... 😳

Danke an alle die geholfen haben.

Thema kann geschlossen werden
 

Neue Themen


Zurück
Oben