schwarz statt bild

Status
Nicht offen für weitere Antworten.
N

nastrovje

Gast
Hi leute!

ich habe das problem, dass wenn ich ein geladenes Image in ein BufferedImage zeichnen möchte (da ich später ein getSubImage() mache) wird das Bild nicht richtig ins Graphics des BufferedImage geschrieben, das heisst es ist einfach schwarz. Wisst Ihr ob es daran liegt, dass das Bild noch nicht richtig geladen wurde, oder ob das geladene bild zum Zeitpunkt der Anzeige noch nicht fertig ins Graphic gezeichnet wurde? habe mir auch schon überlegt ob dies vielleicht mit einem ImageObserver machbar wäre, allerdings weiss ich nicht genau wie man das Teil benützt...
Bin für jede Antwort dankbar!

gruss
 

thE_29

Top Contributor
Vielleicht einfach ein Programmierfehler??

Wie wärs mit Source??


Wann kapiert ihr das endlich mal, das man auf Hand vom Source
1. mehr helfen kann
2. besser sagen kann was der Fehler ist!
 
N

nastrovje

Gast
Bild laden (Klasse ImageLoader)
Code:
			URL imgURL = ImageLoader.class.getResource(_imagename);
			Image image = Toolkit.getDefaultToolkit().createImage(imgURL);

Image in BufferedImage zeichnen (Klasse CityMapView)
Code:
mBufferedImage = new BufferedImage(mCityMap.getWidth(), mCityMap.getHeight(), BufferedImage.TYPE_INT_RGB);
mBufferedImage.getGraphics().drawImage(mCityMap.getImage(), 0, 0, this);

Subimage erstellen (Klasse CityMapView)
Code:
		mImage = mBufferedImage.getSubimage(getPositionX(), getPositionY(), getWidth(), getHeight());

Subimage darstellen (Klasse CityMapPanel)
Code:
		_graphics.drawImage(mCityMapView.getImage(), 0, 0, Color.black, this);
 

thE_29

Top Contributor
Nur so ne Frage, was ist mCityMap für ein Typ?? (oder ist das ein Objekt was es dir zurückbringt??)

Und wieso brauchst du das und nimmt nicht gleich image?


Desweiteren klebe das Image mal auf ein JLabel und lass es dir anzeigen, vielleicht hat er das Bild ja nie!
 
N

nastrovje

Gast
CityMap mCityMap hat die Attribute Image, Width, Height
hier meine ganze Klasse CityMapView, welche einen Ausschnitt aus CityMap liefert
Code:
/*
 * Created on 16.03.2005
 *
 * To change the template for this generated file go to
 * Window&Preferences&Java&Code Generation&Code and Comments
 */
package fight4zuerich.citymap;

import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.util.Vector;

import fight4zuerich.core.Log;


/**
 * @author z102-11
 *
 * To change the template for this generated type comment go to
 * Window&Preferences&Java&Code Generation&Code and Comments
 */
public class CityMapView implements ImageObserver {
	public static final int DEFAULT_STEP_WIDTH  = 20;
	public static final int DEFAULT_STEP_HEIGHT = 20;
	public static final int DEFAULT_WIDTH       = 450;
	public static final int DEFAULT_HEIGHT      = 333;
	
	private int mWidthStep;
	private int mHeightStep;

	private int mPositionX;
	private int mPositionY;
	private int mWidth;
	private int mHeight;
	
	private CityMap mCityMap; 

	private Image mImage;
	
	private BufferedImage mBufferedImage;
	
	public CityMapView(CityMap _cityMap) {
		mCityMap = _cityMap;
		
		setWidthStep(CityMapView.DEFAULT_STEP_WIDTH);
		setHeightStep(CityMapView.DEFAULT_STEP_HEIGHT);
		setWidth(CityMapView.DEFAULT_WIDTH);
		setHeight(CityMapView.DEFAULT_HEIGHT);
		
		setPositionX((mCityMap.getWidth()/2)-(getWidth()/2));
		setPositionY((mCityMap.getHeight()/2)-(getHeight()/2));
		
		mBufferedImage = new BufferedImage(mCityMap.getWidth(), mCityMap.getHeight(), BufferedImage.TYPE_INT_RGB);
		mBufferedImage.getGraphics().drawImage(mCityMap.getImage(), 0, 0, this);

		updateImage();
	}
	
	public Vector getSensitiveMapAreas() {
		Vector result = new Vector();
		Rectangle cityMapViewRect = new Rectangle(getPositionX(), getPositionY(), getWidth(), getHeight());
		Vector input = mCityMap.getSensitiveMapAreas();
		for(int i=0;i<input.size();i++) {
			SensitiveMapArea a = ((SensitiveMapArea)input.get(i));
			Rectangle areaRectangle = new Rectangle(a.getPositionX(), a.getPositionY(), a.getWidth(), a.getHeight());
			if(cityMapViewRect.contains(areaRectangle)) {
				result.add(a);
			}
		}
		return result;
	}
	
	public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
		Log.debug(getClass(), "infoflags: "+infoflags);
		if(infoflags==ImageObserver.ALLBITS) {
			updateImage();
			return false;
		} /*else if(infoflags==ImageObserver.PROPERTIES) {
			updateImage();
			//return false;
		}*/
		return true;
	}
	
	private void updateImage() {
		mImage = mBufferedImage.getSubimage(getPositionX(), getPositionY(), getWidth(), getHeight());
	}
	
	public Image getImage() {
		if(mImage==null) {
			updateImage();
		}
		return mImage;
	}
	
	public boolean moveUp() {
		//System.out.println("[CityMapView.moveUp] aufgerufen");
		if(getPositionY()==0) {
			return false;
		}
		if(getPositionY()-getHeightStep()<0) {
			setPositionY(0);
			updateImage();
			return true;
		} else {
			setPositionY(getPositionY()-getHeightStep());
			updateImage();
			return true;
		}
	}
	
	public boolean moveDown() {
		//System.out.println("[CityMapView.moveDown] aufgerufen");
		if(getPositionY()+getHeight()==mCityMap.getHeight()) {
			return false;
		}
		if(getPositionY()+getHeight()+getHeightStep()>mCityMap.getHeight()) {
			setPositionY(mCityMap.getHeight()-getHeight());
			updateImage();
			return true;
		} else {
			setPositionY(getPositionY()+getHeightStep());
			updateImage();
			return true;
		}
	}
	
	public boolean moveRight() {
		//System.out.println("[CityMapView.moveRight] aufgerufen");
		if(getPositionX()+getWidth()==mCityMap.getWidth()) {
			return false;
		}
		if(getPositionX()+getWidth()+getWidthStep()>mCityMap.getWidth()) {
			setPositionX(mCityMap.getWidth()-getWidth());
			updateImage();
			return true;
		} else {
			setPositionX(getPositionX()+getWidthStep());
			updateImage();
			return true;
		}
	}
	
	public boolean moveLeft() {
		//System.out.println("[CityMapView.moveLeft] aufgerufen");
		if(getPositionX()==0) {
			return false;
		}
		if(getPositionX()-getWidthStep()<0) {
			setPositionX(0);
			updateImage();
			return true;
		} else {
			setPositionX(getPositionX()-getWidthStep());
			updateImage();
			return true;
		}
	}
	
	public CityMap getCityMap() {
		return mCityMap;
	}
}

ich glaube das Problem ist, dass wenn ich das BufferedImage erstelle, ist das Image-Objekt noch nicht fertig geladen. Deshalb möchte ich einen ImageObserver auf dem Image-Objekt machen, das mir mitteilt falls das Bild bereit ist, damit ich danach mein BufferedImage noch einmal updaten kann. Ich bin mir darüber allerdings nicht sicher...
Es ist so dass wenn ich bei jedem aufruf von
Code:
updateImage()
ein neues BufferedImage erzeuge, wird mir das bild richtig angezeigt, allerdings ist dies nicht sehr performant, da das erzeugen des BufferedImage bzw. das zeichnen darauf bei mir 140 ms benötigt...
[/code]
 

Kian

Aktives Mitglied
Benutze den MediaTracker um Bilder zu laden, ich hatte auch mal so ein ähnliches Problem

Code:
MediaTracker tracker = new MediaTracker(this);

 Image img = Toolkit.getDefaultToolkit().getImage("Path");

        tracker.addImage(img,0);

          try
          {
            tracker.waitForAll(); // hier wartet der Tracker bis alle Bilder (in diesem Fall nur eines) geladen wurde!
          }catch(InterruptedException nix){}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O 2D-Grafik Bild abgeschnitten nach Rotation mit Affine Transform und Hintergrund Schwarz AWT, Swing, JavaFX & SWT 8
GianaSisters 2D-Grafik 2 BufferedImages zusammenfügen wird Schwarz/Weiß AWT, Swing, JavaFX & SWT 10
J resize - Label bleibt erst schwarz AWT, Swing, JavaFX & SWT 4
S BufferedImage als schwarz-weiß-Bild AWT, Swing, JavaFX & SWT 3
A BufferedImage nach dem Speichern immer schwarz AWT, Swing, JavaFX & SWT 8
B Swing showMessageDialog ist schwarz AWT, Swing, JavaFX & SWT 5
G 2D-Grafik BufferedImage Hintergrund immer schwarz AWT, Swing, JavaFX & SWT 4
S Bestimmen ob Bereich im Bild eher Schwarz oder Weiss ist? AWT, Swing, JavaFX & SWT 13
G Bild nach Bearbeitung schwarz AWT, Swing, JavaFX & SWT 4
L JFreeChart - Gitterfarbe schwarz AWT, Swing, JavaFX & SWT 4
F Bildschirm schwarz abdecken AWT, Swing, JavaFX & SWT 8
X Metal Look and Feel in schwarz AWT, Swing, JavaFX & SWT 3
V JMenu und die Tabs von JTabbedFrame sind auf einmal schwarz AWT, Swing, JavaFX & SWT 3
D Bild Schwarz-Weis machen AWT, Swing, JavaFX & SWT 4
G Gespeichertes Bild ist plötzlich schwarz! AWT, Swing, JavaFX & SWT 5
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
U Gibt es eine Möglichkeit statt concatenate einen anderen Befehl zu nutzen? AWT, Swing, JavaFX & SWT 9
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
M Java FX Layouts übereinander statt nebeneinander AWT, Swing, JavaFX & SWT 4
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
M JDialog statt JFrame AWT, Swing, JavaFX & SWT 22
T Swing Drag and Drop - JLabels tauschen statt überschreiben AWT, Swing, JavaFX & SWT 11
J Swing GridBagLayout: Links-nach-rechts Orientierung statt zentriert AWT, Swing, JavaFX & SWT 12
C JCheckBox Kreuz statt Haken AWT, Swing, JavaFX & SWT 7
C Swing Labeltext am Anfang statt am Ende kürzen AWT, Swing, JavaFX & SWT 6
N JTable RadioButton statt Checkbox AWT, Swing, JavaFX & SWT 4
C JTextPane <br oder <p> statt \n AWT, Swing, JavaFX & SWT 2
P [SWT] Background-Image skalieren statt kacheln AWT, Swing, JavaFX & SWT 2
0 JTable - Hintergrund Tabellen statt Grau AWT, Swing, JavaFX & SWT 5
J *** statt Text AWT, Swing, JavaFX & SWT 2
R Double in der Tabelle statt String und Integer AWT, Swing, JavaFX & SWT 3
P Warum Swing statt Awt? AWT, Swing, JavaFX & SWT 4
G Bei JScrollpane statt Scrollbar eine Vorschau verwenden AWT, Swing, JavaFX & SWT 3
A Drucker Auswahlmaske statt auf dem Standarddrucker zudrucken AWT, Swing, JavaFX & SWT 4
R JTextFields mit Return statt Tab anwählen AWT, Swing, JavaFX & SWT 4
N JFileChooser wechselt Farbe (grün statt blau) AWT, Swing, JavaFX & SWT 3
M JavaFX Mandelbrot-bild noch nicht optimiert AWT, Swing, JavaFX & SWT 7
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
frager2345 Bild aus Dateien lesen und als Hintergrund verwenden AWT, Swing, JavaFX & SWT 2
T Bild in ein graphics füllen AWT, Swing, JavaFX & SWT 2
N imageIcon zeigt kein Bild an AWT, Swing, JavaFX & SWT 5
B Bild lädt nicht AWT, Swing, JavaFX & SWT 2
izoards Bild ausdrucken - PageFormat setzen geht nicht AWT, Swing, JavaFX & SWT 5
M Bild wird nicht geladen obwohl sie gefunden wird AWT, Swing, JavaFX & SWT 0
V JavaFX Bild leer und keine Fehlermeldung AWT, Swing, JavaFX & SWT 21
D JavaFX Bearbeitetes Bild wird nicht gespeichert AWT, Swing, JavaFX & SWT 9
D JavaFX Größe des Bild an ImageView anpassen AWT, Swing, JavaFX & SWT 3
M Bewegtes Bild im BorderLayout.CENTER AWT, Swing, JavaFX & SWT 6
C Falschfarbenbild (lineare Grauwertspreizung)aus Grauwert-Bild erstellen AWT, Swing, JavaFX & SWT 15
C Kleineres Bild an bestimmte Koordinaten setzen AWT, Swing, JavaFX & SWT 6
S Bild neu skalieren - Bild in Bild speichern? AWT, Swing, JavaFX & SWT 6
N Bild Drehen AWT, Swing, JavaFX & SWT 1
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
J Bild von anderer Klasse will nicht laden AWT, Swing, JavaFX & SWT 1
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
M Combobox bild anklicken AWT, Swing, JavaFX & SWT 2
cool_brivk24 Swing ImageIcon lädt kein Bild AWT, Swing, JavaFX & SWT 12
L Bild nicht in der Mitte AWT, Swing, JavaFX & SWT 16
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
J Swing Bild in Button AWT, Swing, JavaFX & SWT 11
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
T JavaFX Bild in Tabellenzelle AWT, Swing, JavaFX & SWT 2
Ksanatos Swing Bild (.jpg) einlesen und per Button wechseln AWT, Swing, JavaFX & SWT 9
S JPanel rotieren, Bild ist abgeschnitten, Clipping? AWT, Swing, JavaFX & SWT 0
MaxG. Swing Bild Button AWT, Swing, JavaFX & SWT 7
P Swing Bild Skallieren AWT, Swing, JavaFX & SWT 1
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
A Swing Bild wird nicht mehr geladen AWT, Swing, JavaFX & SWT 4
A Swing Gemaltes Bild über saveDialog speichern unter AWT, Swing, JavaFX & SWT 15
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
S Bild mit ImageIcon auf GUI verkleinern AWT, Swing, JavaFX & SWT 3
T AWT Farben in einem Bild ändern AWT, Swing, JavaFX & SWT 8
I JFrame Bild strecken und auf Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 2
F Gezeichnetes als bild speichern AWT, Swing, JavaFX & SWT 4
B 2D-Grafik Bild farblich filtern AWT, Swing, JavaFX & SWT 2
B JavaFX ImageView neues Bild zuweisen AWT, Swing, JavaFX & SWT 19
A 2D-Grafik Bild wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 24
K Bild in JFrame AWT, Swing, JavaFX & SWT 2
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
B Swing Unterteiltes JFrame mit Bild in der Mitte AWT, Swing, JavaFX & SWT 4
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
Z Bildervorschau, MouseDragged das Bild verschieben AWT, Swing, JavaFX & SWT 1
M JavaFX Ein Bild ohne Rahmen fällt runter? AWT, Swing, JavaFX & SWT 2
G Anonyme Instanz von JXImageView erstellen und mit Bild initialisieren AWT, Swing, JavaFX & SWT 7
A JPanel Bild laden (Porblem mit Dateipfad) AWT, Swing, JavaFX & SWT 2
M JavaFX - Bild in Jar einbinden, sodass es auch außerhalb der IDE geladen wird. AWT, Swing, JavaFX & SWT 2
M Bild Beschreibung mit ImageIO speichern AWT, Swing, JavaFX & SWT 1
M "ImageIO.read()" liest Bild nicht richtig ein AWT, Swing, JavaFX & SWT 3
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
K Bild in Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
C GUI öfters durchlaufen und hinterher Bild speichern AWT, Swing, JavaFX & SWT 1
M AWT Farben in Bild ersetzen AWT, Swing, JavaFX & SWT 11
E JavaFX Bild einfügen AWT, Swing, JavaFX & SWT 6
G paintComponents zerstückelt Bild AWT, Swing, JavaFX & SWT 0
C 2D Grafik ein Bild soll permanent durchlaufen AWT, Swing, JavaFX & SWT 2
1 Textfield: jede Buchstabe ein Bild AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben