BufferedImage-Fehler? Falsches Bild wir gezeichnet

C

Conehead

Gast
Hallo.
Ich weiß nicht ganz, wie ich diesen Thread hier nennen soll, daher versuch ich einfach mal kurz zu erklären was ich vorhabe.
Ich habe 2 Panels untereinander. Oben soll ein Bild angezeigt werden, welches ich von der Webcam abgreife.
Darunter möchte ich das selbe Panel haben, nur dass noch etwas extra auf das Bild gezeichnet wird.
(Habe einfach ein paar rosa Punkte ins Bild gemalt)

Mein Problem liegt jetzt daran, dass wenn ich das Bild bearbeite, jedoch beide Bilder bearbeitet wurden.
Also sind meine Punkte im Panel oben und unten, obwohl sie nur unten sein sollten.

Hier mal ein kleine Bild dazu:
unbenanntqsy.jpg


Hier noch etwas Quelltext:

Java:
public void getScreenshotFromCam(Gui gui) {
                //aktuelles bild von der cam holen
		ScreenPanel imgpanel = gui.getCurrentScreenPanel();
		Player player = gui.getActiveCam();
		if(player != null){
		FrameGrabbingControl fgc = (FrameGrabbingControl) player
				.getControl("javax.media.control.FrameGrabbingControl");
                //im buffer speichern und in Image konvertieren
		buf = fgc.grabFrame();
		btoi = new BufferToImage((VideoFormat) buf.getFormat());
		createdImage = btoi.createImage(buf);
                //oberen panel bild hinzufügen
		imgpanel.setImage(createdImage);
                //bild an funktion für unteres panel weitergeben
		convertImageToMap(gui,createdImage);
		}
	}
	
	public void convertImageToMap(Gui gui, Image srcImg){
                //unteres panel auslesen
		ScreenPanel imgpanel2 = gui.getCurrentSolutionPanel();
               //als bufferedimage 
		BufferedImage img = (BufferedImage) srcImg;
                //punkte zeichnen
		img.setRGB(30, 30,16711780);
		img.setRGB(31, 31,16711780);
		img.setRGB(32, 32,16711780);
		img.setRGB(33, 33,16711780);
                //das bild zum schluss zeichnen
		imgpanel2.setImage(img);
	}

Das komisch ist ja, dass ich am Ende der ersten Funktion folgendes aufrufe:

imgpanel.setImage(createdImage);
convertImageToMap(gui,createdImage);

Also wird dem Panel auf dem das Bild gezeichnet werden soll, erst das Bild übergeben...und erst DANN wird das Bild übergeben und bearbeitet und neu gespeichert.

Hoffe ihr könnt mir helfen, ich bin so langsam am Verzweifeln und vorher möchte ich auch noch nicht weiterarbeiten.

MfG

conehead
 

Marco13

Top Contributor
Ähmja... kann sein dass da irgendwo dasselbe Bild verwendet wird, wo nicht dasselbe verwendet werden sollte... kannst man sowas testen wie
Java:
public void convertImageToMap(Gui gui, Image srcImg){
                //unteres panel auslesen
        ScreenPanel imgpanel2 = gui.getCurrentSolutionPanel();
               //als bufferedimage 
        BufferedImage imgIn = (BufferedImage) srcImg;
      

        // Neues Bild erzeugen, in das das alte reingemalt wird....
        BufferedImage img = new BufferedImage(imgIn.getWidth(), imgIn.getHeight(), BufferedImage.TYPE_INT_RGB);
        img.getGraphics().drawImage(imgIn,0,0,null);
                //punkte zeichnen
        img.setRGB(30, 30,16711780);
        img.setRGB(31, 31,16711780);
        img.setRGB(32, 32,16711780);
        img.setRGB(33, 33,16711780);
                //das bild zum schluss zeichnen
        imgpanel2.setImage(img);
    }

Das könnte man ggf. eleganter machen... und sollte man vielleicht auch ... aber schau erstmal ob das passt...
 
C

conehead

Gast
Wow.
Ja das funktioniert!
Vielen Dank.

Hatte auch schon so etwas überlegt, aber habe mir dann eigentlich doch gedacht, dass es das ja nicht sein kann,
da ich doch das Bild bereits vorher auf das obere Panel lege!
 

jeppi

Mitglied
Das könnte man ggf. eleganter machen...

Finde ich ziemlich elegant, quick & dirty gelöst - ganz nach Daniel Düsentrieb-Manier :D

Würde selbst aber bei nächster Gelegenheit den Fehler suchen.
Sieht nach ner übergebenen Referenz statt ner echten Kopie aus.

edit: mein ich mal, so als fast-hoffentlich-bald-nicht-mehr-anfänger
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ja, ist es wohl auch: [EDIT: Nein, elegant ist es nicht :oops: Ich meinte die Ursache:] Bei
imgpanel.setImage(createdImage);
wird eine Referenz übergeben. Diese Referenz wird dann weitergereicht, und weiter unten wurde mit
imgpanel2.setImage(img);
eine andere Referenz aber eben auf dasSELBE Bild an das andere Panel üebrgeben.

Am günstigsten wäre wohl, EINmal an einem geeigneten Platz ein Bild zu erstellen, in dem man die Bearbeitungen machen will. Ich habe selbst noch nicht mit FrameGrabbingControl usw. gearbeitet, aber offenbar bekommt man dan ja immer ein neues Bild?! Aber vermutlich immer mit der gleichen Größe. Man könnte sowas machen wie
Code:
private BufferedImage editImage = null;

public void holsVonDerCam()
{
    Image image = frageGrabberUndSo.convertImage();
    putImageToMap(image);
}

private void putImageToMap(Image image)
{
     // Nur EINmal ein neues Bild erstellen, wenn es noch keins gibt
    if (editImage == null)
    {
        editImage = new BufferedImage(...);
    }

     // Das übergebene Bild in das EditImage reinmalen:
     editImage.getGraphics().drawImage(image,0,0,null);

    ....

}

Dass das casten auf BufferedImage klappt, ist vermutlich nämlich auch eher Glücksache :D
 

jeppi

Mitglied
Ich finde es gar nicht mal so unelegant, denn letztendlich erzeugst Du durch das Hineinzeichen gewissermassen ja doch eine echte Kopie. Ich sehe da noch nicht mal die Gefahr von Nebenwirkungen, ausser vielleicht, dass es performantere Lösungen gibt...

Da ich jetzt aber die dritte Nacht hintereinander besch...eiden geschlafen habe und kurz davor bin, zu haluzinieren, sehe ich mich gerade nicht in der Lage, die source zu verstehen, ist aktuell nicht mein Stoff ;)

edit: nu isses etwas dudengerechter :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Arbeitsspeicherverbrauch BufferedImage.TYPE_INT_RGB vs. TYPE_3BYTE_BGR AWT, Swing, JavaFX & SWT 6
H BufferedImage zurücksetzen funktioniert nicht AWT, Swing, JavaFX & SWT 12
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
I GEmaltes BufferedImage löschen AWT, Swing, JavaFX & SWT 3
cool_brivk24 BufferedImage einem ClickEvent hinzufügen AWT, Swing, JavaFX & SWT 13
cool_brivk24 AWT BufferedImage wird nicht geladen AWT, Swing, JavaFX & SWT 17
J linken Bildausschnitt eines BufferedImage abschneiden AWT, Swing, JavaFX & SWT 4
Zar von Domarus JFrame zu BufferedImage konvertieren AWT, Swing, JavaFX & SWT 3
S 2D-Grafik User-BufferedImage rotieren im Zentrum und ohne "anpassung" AWT, Swing, JavaFX & SWT 2
C Pixel-Rendering/Animation Performance in BufferedImage AWT, Swing, JavaFX & SWT 1
H Swing BufferedImage zeichnen AWT, Swing, JavaFX & SWT 1
C Swing BufferedImage zeichnen und JLabels setzen. AWT, Swing, JavaFX & SWT 17
G Subimage von BufferedImage speichern AWT, Swing, JavaFX & SWT 4
D JPanel Graphic2D als BufferedImage Speichern AWT, Swing, JavaFX & SWT 5
D BufferedImage -> Feature Extraktion. Unterschiedliche BufferedImage imageTypes problem AWT, Swing, JavaFX & SWT 4
I 2D-Grafik Shape aus BufferedImage "löschen" AWT, Swing, JavaFX & SWT 2
M 2D-Grafik LookupOp Operation auf BufferedImage AWT, Swing, JavaFX & SWT 7
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
P BufferedImage schlechte Qualität beim Abspeichern AWT, Swing, JavaFX & SWT 9
S BufferedImage als schwarz-weiß-Bild AWT, Swing, JavaFX & SWT 3
Luk10 BufferedImage[...].getData() vs BufferedImage.setRGB() AWT, Swing, JavaFX & SWT 2
D Schnelles kopieren von Pixeln in ein BufferedImage AWT, Swing, JavaFX & SWT 25
J Flackern wie mit BufferedImage beheben AWT, Swing, JavaFX & SWT 4
N Swing BufferedImage neu laden AWT, Swing, JavaFX & SWT 10
N 2D-Grafik BufferedImage, Line2D, Swing und die Probleme AWT, Swing, JavaFX & SWT 5
Luk10 BufferedImage auf ein anderes BufferedImage zeichnen AWT, Swing, JavaFX & SWT 6
P BufferedImage auf JPanel AWT, Swing, JavaFX & SWT 11
K 2D-Grafik BufferedImage eingelesen, welches Modell?! AWT, Swing, JavaFX & SWT 2
T BufferedImage bei paintComponent AWT, Swing, JavaFX & SWT 6
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
0x7F800000 2D-Grafik int[] zu BufferedImage konvertieren AWT, Swing, JavaFX & SWT 27
H 2D-Grafik BufferedImage aus Integer-Array AWT, Swing, JavaFX & SWT 3
Luk10 2D-Grafik BufferedImage sauber rotieren AWT, Swing, JavaFX & SWT 16
P Image mehrfach in ein BufferedImage zeichnen AWT, Swing, JavaFX & SWT 7
A BufferedImage nach dem Speichern immer schwarz AWT, Swing, JavaFX & SWT 8
J Bild aus Datei in BufferedImage laden AWT, Swing, JavaFX & SWT 4
E BufferedImage Alphaknal ein- und ausblenden AWT, Swing, JavaFX & SWT 7
N BufferedImage zeichnen AWT, Swing, JavaFX & SWT 4
D BufferedImage Größe skalieren AWT, Swing, JavaFX & SWT 2
P Swing Vom BufferedImage bei paintComponent nur soviel zeichnen, wie nötig AWT, Swing, JavaFX & SWT 3
B 2D-Grafik BufferedImage Performance AWT, Swing, JavaFX & SWT 3
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
E AWT RenderedImage aus BufferedImage erzeugen, um Bild abzuspeichern? AWT, Swing, JavaFX & SWT 4
S Unterscheiden ob ein Graphics-Objekt von einer JComponent oder einem BufferedImage kommt..? AWT, Swing, JavaFX & SWT 4
A 2D-Grafik BufferedImage wird nicht eingezeichnet AWT, Swing, JavaFX & SWT 3
G 2D-Grafik BufferedImage Hintergrund immer schwarz AWT, Swing, JavaFX & SWT 4
Developer_X Swing Auf ein BufferedImage mit Graphics/Graphics2D zeichnen AWT, Swing, JavaFX & SWT 6
J AWT BufferedImage to 2DArray AWT, Swing, JavaFX & SWT 10
R Bild drehen UND skalieren (Image bzw BufferedImage) AWT, Swing, JavaFX & SWT 5
J JPanel in Bufferedimage AWT, Swing, JavaFX & SWT 3
1 BufferedImage in byte[], dann in String und zurück AWT, Swing, JavaFX & SWT 7
J Swing paintComponent() - repaint() - BufferedImage anzeigen AWT, Swing, JavaFX & SWT 5
B BufferedImage Builder AWT, Swing, JavaFX & SWT 15
F Transparentes BufferedImage über BufferedImage AWT, Swing, JavaFX & SWT 12
F Größe von BufferedImage ändern AWT, Swing, JavaFX & SWT 27
I Swing JComponent als BufferedImage speichern AWT, Swing, JavaFX & SWT 18
Dragonfire Swing Zoom-Vorgang optimieren [BufferedImage] AWT, Swing, JavaFX & SWT 2
2 Memory Leak mit BufferedImage !! AWT, Swing, JavaFX & SWT 15
X BufferedImage maximiert in JFrame anzeigen? AWT, Swing, JavaFX & SWT 2
R JPanel - BufferedImage - zeichnen großer Bilder AWT, Swing, JavaFX & SWT 2
R JTable - TableCellRenderer - BufferedImage AWT, Swing, JavaFX & SWT 9
D BufferedImage und Graphics2D AWT, Swing, JavaFX & SWT 3
R Zeichnen von Zahlen in BufferedImage AWT, Swing, JavaFX & SWT 6
G BufferedImage.getRGB() mit 3 int-Werten vergleichen AWT, Swing, JavaFX & SWT 2
Luma BufferedImage wird nicht gezeichnet AWT, Swing, JavaFX & SWT 3
G keine ScaledInstance von BufferedImage? AWT, Swing, JavaFX & SWT 6
S BufferedImage & Scaling: Altes Problem im neuen Gewand AWT, Swing, JavaFX & SWT 2
G zu viele/große BufferedImage führt zu Java heap space AWT, Swing, JavaFX & SWT 5
G BufferedImage und jpg --> maximale Qualität AWT, Swing, JavaFX & SWT 9
F HTML Text irgendwie auf BufferedImage bringen AWT, Swing, JavaFX & SWT 3
R BufferedImage Problem AWT, Swing, JavaFX & SWT 2
G Problem mit BufferedImage und imageIO AWT, Swing, JavaFX & SWT 2
S BufferedImage drehen AWT, Swing, JavaFX & SWT 3
? ActionListener auf BufferedImage AWT, Swing, JavaFX & SWT 11
M BufferedImage mit html interpretierten String beschriften AWT, Swing, JavaFX & SWT 3
A Probelme mit großen BufferedImage in paintComponent AWT, Swing, JavaFX & SWT 7
B Farbtiefe eines BufferedImage verringern AWT, Swing, JavaFX & SWT 3
F ImageIcon -> BufferedImage AWT, Swing, JavaFX & SWT 2
T Performance Problem bei BufferedImage AWT, Swing, JavaFX & SWT 3
F Animiertes Gif als BufferedImage AWT, Swing, JavaFX & SWT 10
L Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ? AWT, Swing, JavaFX & SWT 5
C Rotate BufferedImage --> Bild unvollständig AWT, Swing, JavaFX & SWT 5
U Streifen hinter bewegtem BufferedImage AWT, Swing, JavaFX & SWT 13
M BufferedImage skalieren AWT, Swing, JavaFX & SWT 6
T BufferedImage verkleinern Resultat ist zu pixelig. AWT, Swing, JavaFX & SWT 6
G Image Object speichern oder in ein BufferedImage umwandeln AWT, Swing, JavaFX & SWT 2
P Problem beim Zeichnen auf ein BufferedImage AWT, Swing, JavaFX & SWT 4
B BufferedImage aus einer Datei AWT, Swing, JavaFX & SWT 4
C Farben in BufferedImage ändern ? AWT, Swing, JavaFX & SWT 2
J Image to BufferedImage AWT, Swing, JavaFX & SWT 5
T BufferedImage kopieren AWT, Swing, JavaFX & SWT 3
T BufferedImage Farbe "Transparent" AWT, Swing, JavaFX & SWT 21
T BufferedImage + bestimmten bereich ausfüllen AWT, Swing, JavaFX & SWT 3
M BufferedImage Größe? AWT, Swing, JavaFX & SWT 10
U Löschen eines BufferedImage AWT, Swing, JavaFX & SWT 7
J Image aus BufferedImage ohne AWT AWT, Swing, JavaFX & SWT 5
V Image in BufferedImage AWT, Swing, JavaFX & SWT 3
J BufferedImage aus byte-Array erstellen AWT, Swing, JavaFX & SWT 3
hannibalstgt Fehler bei JCOMBOBOX GUI Anzeige AWT, Swing, JavaFX & SWT 4
J Fehler bei jFame.setTitle() AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben