SWT Image funktion auf ImageDaten

lumo

Top Contributor
Hallo

ich versuche zwei bilder zu verarbeiten.
ein bild (größer as das zweite) dient als hintergrund
das zweite bild ist ein schwarz-weiss bild (eine art schablone)

nun soll das zweite bild mit den informationen das erste invertieren...
klappt so weit, nur dass es nicht mit allen bildern funktioniert...

(nachdem ich das jetzt sicher schon 5x versucht habe hoffe ich dass einer von euch den fehler sieht... :shock:

zu den daten, die bilder sind als ImageData, welche ein feld byte data[] gespeichert.
data hat jeweils r,g,b,r,g,b etc stehen, darum veränder ich immer im 3er pack;
ich kann/will nicht über alle bilddaten drüber, da das einiges langsamer wäre.

getBytes() und setBytes funktionen möchte ich nicht verwenden, wegen unsupported format exceptions...

Java:
	public static Image getXORImage(Image image, Image xorImage, int x, int y) {
		try {
			ImageData imageData = image.getImageData();
			ImageData xorData = xorImage.getImageData();
			for (int j = y; j < xorData.height; j++) {
				for (int i = x; i < xorData.width; i++) {
					int offset = j * imageData.width + i;
					int alphaOffset = j * xorData.width + i;
					try {
						if ((offset * 3 + 2) < imageData.data.length
								&& alphaOffset * 3 < xorData.data.length) {
							byte inv = 0;
							if (xorData.alphaData != null) {
								inv = (byte) (255 - xorData.alphaData[alphaOffset]);
							} else {
								inv = xorData.data[alphaOffset * 3];
							}
							imageData.data[offset * 3] = (byte) (imageData.data[offset * 3] ^ (255 - inv));
							imageData.data[offset * 3 + 1] = (byte) (imageData.data[offset * 3 + 1] ^ (255 - inv));
							imageData.data[offset * 3 + 2] = (byte) (imageData.data[offset * 3 + 2] ^ (255 - inv));
						}
					} catch (Exception ignore) {
						ignore.printStackTrace();
						System.exit(0);
					}
				}
			}
			Image newImage = new Image(Display.getDefault(), imageData);
			return newImage;
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(0);
		}
		return null;
	}
nun mein problem: interlaced output mit echtzeit-berechnung... WTF?
bei großen hintergrundbildern wird das bild kursiv (also definitiv irgendwo ein index fehler?!)

update: veränderter code, klappt jetzt auch mit transparenten bildern
update2: ich hab jetzt ein attachment dran gehängt da sieht man zwei ergebnisse;
das obere ist von meinem testprogramm, das nur zwei bilder als input nimmt und dann das ergebnis darstellt (auf einem label)

darunter ist meine anwendung wo's in echtzeit aktualisiert werden soll...
und da sieht man das feature: interlaced - das aber nicht da sein soll ;D
 

Anhänge

  • sample.png
    sample.png
    57,3 KB · Aufrufe: 37
Zuletzt bearbeitet:

lumo

Top Contributor
ich hab ein kleines lauffähiges programm gemacht.
eigentlich zwei, eines mit dem man zwei bilder XOR'en kann
und ein anders das das selbe macht und zwar in einer graphischen komponente (wo's bei mir nicht klappt)
hab auch noch meine beispielbilder dazugegeben, in den verschiedensten formaten (jpg & png transparent/weisser hintergrund)

sollte alles da sein, was das programm braucht.
falls ich etwas vergessen habe bitte melden ;)

EDIT: fehler im attachment behoben
 

Anhänge

  • sampleV2.zip
    173,6 KB · Aufrufe: 1
Zuletzt bearbeitet:

Marco13

Top Contributor
Welche Bilder da jetzt verXORt werden (sollen) ist nicht ganz klar. Aber ich hab' mal
Java:
	public static Image getXORImage(Image image, Image xorImage, int x, int y) {
		try {
			ImageData imageData = image.getImageData();
			
			System.out.println("w "+imageData.width);
			System.out.println("h "+imageData.height);
			System.out.println("len "+imageData.data.length+" ("+imageData.width*imageData.height*3+")");
eingefügt, und man sieht, dass das Bild offenbar NICHT 3*w*h sondern 4*w*h bytes hat. Wird das Format irgendwo festgelegt? Das kann doch erstmal nur vom SWTResourceManager gemacht werden, oder? (Wie gesagt, bin da noch nicht so drin...)
 

lumo

Top Contributor
ich bin jetzt mal die dinge durchgegangen...
das bild als auch die imagedata haben einen wert .type, welcher bei den geladenen bildern aber immer der selbe ist... BMP oder '-1'

in den sample apps sollten die zu ver XOR'ten bilder schon fix gecoded sein...
habe mit verschiedenen formaten verschiedene ergebnisse bekommen, drum hab ich zum testen alle bilder beigelegt...

wie kanns sein dass da mal 3 und mal 4 bytes sind? rgb = r, g, b ;) alpha ist in nem eigenen daten-channel...
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Hab' mal kurz über den Code gebrowst, von SWTResourceManager über ImageLoader bis ImageFormat bis PNGFileFormat & Co: Das geht schnell ziemlich in die Tiefe. Dass der genaue Bildtyp vom Bildtyp abgängt (also z.B. 3 bytes bei JPG und 4 bei PNG) ist nicht überraschend ;) Eine spontane Vermutung (!) ist, dass man für solche Operationen vielleicht (!) ein Bild mit einem bekannten Typ erstellen sollte (bei dir also explizit eins mit 3 bytes) und dort das geladene Bild reinzeichnen sollte - zumindest ist das bei Swing und BufferedImages manchmal üblich. Ich habe beim ersten Überfliegen zumindest keine direkte Möglichkeit gesehen, an irgendeiner Stelle zu sagen: "Ich hätte das Bild gerne als diesen-und-jenen Typ geladen".
Das alles unter Vorbehalt, ich stehe bei SWT auch erst am Anfang. Ist aber teilweise schon ziemlich krapmfig im Vergleich zu Swing...

EDIT: BTW, in dem Code standen z.B. Bildnamen wie "HelloWorld.png", die Dateien hießen aber "ogo_left_hello_world.png" - hab' mal ein bißchen rumprobiert, konnte den Effekt aber ansatzweise anscheinend auch beobachten. Zumindest die Ausgabe (mit den 4 bytes) war ja eindeutig.

EDIT2: Es könnte auch sein, dass bei SWT (ähnlich wie bei Swing eigentlich) gar nicht vorgesehen ist, dass man direkt auf dem ImageData-array rumpfuscht, sondern man alles mit getPixel/setPixel machen müßte. Das wäre dann vermutlich eher Format-unabhängig, aber vermutlich auch (u.U. deutlich) langsamer. Man hat wohl, ähnlich wie bei Swing/BufferedImage den trade-off: Entweder man verwendet die Format-Agnostischen, allgemeinen, aber etwas langsameren Methoden, oder man arbeitet direkt auf den rohen daten - muss dann aber u.U. zwei verschiedene XOR-Methoden schreiben, die auf einem 3byte- bzw. 4byte-Array arbeiten....
 
Zuletzt bearbeitet:

lumo

Top Contributor
get/setpixel ist deutlichst langsamer... nichts mehr mit echtzeit ;)
das mit dem zeichnen des geladenen images in ein neu erstelltes bild wäre sicher wert auszuprobieren... mach ich bei gelegenheit
muss leider gerade was anderes fertig machen...
 

lumo

Top Contributor
so hab jetzt eine funktion geschrieben, die mir alle bilddaten in das selbe format (4bytes) + alpha umrechnet;
jetzt muss man nur noch die funktion aufrufen, bevor man die bilder übergibt (könnte den teil auch in die xor-funktion einbauen - da es nur dort nötig ist) und es klappt mit ALLEN varianten! :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
K JavaFX Bildergalerie aus Image Ordner laden AWT, Swing, JavaFX & SWT 3
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
L AWT .gif image transparent machen AWT, Swing, JavaFX & SWT 3
kodela angezeigtes Image entfernen AWT, Swing, JavaFX & SWT 1
R Java, GUI, Hintergrundbild, Image, AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
T Swing Buffered Image anzeigen AWT, Swing, JavaFX & SWT 45
L Image kann nicht gefunden werden AWT, Swing, JavaFX & SWT 1
S Stretch Image in ImageView AWT, Swing, JavaFX & SWT 4
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
L JavaFX Image mit Blureffect AWT, Swing, JavaFX & SWT 2
Bluedaishi JavaFX Button Image aus Datenbank AWT, Swing, JavaFX & SWT 13
F javaxt.io.Image getBufferedImage liefert null AWT, Swing, JavaFX & SWT 1
Yjuq JavaFX Custom Control - Image resize AWT, Swing, JavaFX & SWT 0
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
J 2D-Grafik Background Image Klasse AWT, Swing, JavaFX & SWT 14
Q AWT TicTacToe Image auf Button hinzufügen AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L JavaFX leeres weißes Image - javafx.scene.image.Image AWT, Swing, JavaFX & SWT 2
L JavaFX Image im ImageView auf Scroll Listener reagieren AWT, Swing, JavaFX & SWT 5
Naxon89 JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
W Javafx - Image soll sich mit der Camera mitbewegen AWT, Swing, JavaFX & SWT 1
B Graphics to Image AWT, Swing, JavaFX & SWT 3
L Image in anderes kopieren AWT, Swing, JavaFX & SWT 0
T Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 1
S JavaFX Image Skalierung in Scrollpane, Scrollpane resized sich nicht AWT, Swing, JavaFX & SWT 5
I Image im PopupMenu vom SystemTray AWT, Swing, JavaFX & SWT 8
F JavaFX Position von Image angeben/verändern AWT, Swing, JavaFX & SWT 2
M JavaFX Image View Würfel berechnen AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
F Swing Image einem Button hinzufügen AWT, Swing, JavaFX & SWT 5
B Resize von Image nach Resize von Button AWT, Swing, JavaFX & SWT 1
T Image aus "nicht-src-ordner" AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
C Image laden und Speichern - Image wird auf JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Image in JTable einfügen AWT, Swing, JavaFX & SWT 9
M Image aus MS Access anzeigen lassen AWT, Swing, JavaFX & SWT 9
H Image im Array per Knopfdruck ändern AWT, Swing, JavaFX & SWT 6
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
G JavaFX Image vergrößern AWT, Swing, JavaFX & SWT 5
U Image mit Zeichenbereich rotieren AWT, Swing, JavaFX & SWT 3
P Speicherproblem SWT.Image in Nebula-Gallery AWT, Swing, JavaFX & SWT 3
L JavaFX: Bild in Image einlesen AWT, Swing, JavaFX & SWT 11
D Image soll langsam sichtbar werden AWT, Swing, JavaFX & SWT 4
D JLabel Image ausrichten AWT, Swing, JavaFX & SWT 2
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
H Image Icon ersetzen AWT, Swing, JavaFX & SWT 8
I Image Button AWT, Swing, JavaFX & SWT 4
U IntBuffer zum Image konvertieren. AWT, Swing, JavaFX & SWT 9
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
T 2D-Grafik Slideshow (DoubleBuffering und Image transformieren/bewegen) AWT, Swing, JavaFX & SWT 6
K Swing Warum bleibt das Image immer gleich AWT, Swing, JavaFX & SWT 4
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
R Image laden sehr langsam AWT, Swing, JavaFX & SWT 7
D Image.getScaledInstance() vs. Netzwerkverbindung??? AWT, Swing, JavaFX & SWT 2
reibi SWT Image viewer AWT, Swing, JavaFX & SWT 2
A Applet .gif in applet Image nicht animiert angezeigt AWT, Swing, JavaFX & SWT 4
M Image wird nicht neugezeichnet nach dem Wechsel AWT, Swing, JavaFX & SWT 2
lumo SWT Image Pattern AWT, Swing, JavaFX & SWT 5
P Image mehrfach in ein BufferedImage zeichnen AWT, Swing, JavaFX & SWT 7
M Swing Image in JPanel als Componente AWT, Swing, JavaFX & SWT 2
P nicht sichtbares JPanel / JFrame als Image speichern AWT, Swing, JavaFX & SWT 3
T Image skaliert in Variable speichern AWT, Swing, JavaFX & SWT 6
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
S Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 2
0 Mousecurser mit Image hinterlegen AWT, Swing, JavaFX & SWT 4
B Swing Drag&Drop mit Feedback (Image am Mauszeiger) AWT, Swing, JavaFX & SWT 7
N Java Choice Bilderausgabe - images - - image - AWT, Swing, JavaFX & SWT 2
D iText PdfPCell mit Image AWT, Swing, JavaFX & SWT 3
S 2D-Grafik Icon in Image (System Icons) AWT, Swing, JavaFX & SWT 2
S Button mit Image AWT, Swing, JavaFX & SWT 7
A Skaliertes Image pixelweise bearbeiten AWT, Swing, JavaFX & SWT 6
L Swing Image zur Laufzeit verändern AWT, Swing, JavaFX & SWT 6
F SWT GC drawText auf halbtransparentem Image AWT, Swing, JavaFX & SWT 21
G Swing JEdtitorPane und HTML Image Seite AWT, Swing, JavaFX & SWT 2
C Image mit Graphics2D zeichnen AWT, Swing, JavaFX & SWT 9
C Image performant skalieren AWT, Swing, JavaFX & SWT 5
D SWT Image Farbtiefe AWT, Swing, JavaFX & SWT 2
L Swing Auf unabhängiges Image-Objekt zeichnen AWT, Swing, JavaFX & SWT 8
lumo SWT Composite + Image + zeichnen AWT, Swing, JavaFX & SWT 4
V Ein Image als Button (nicht mit JButton(Icon)) AWT, Swing, JavaFX & SWT 5
D Image Viewer gesucht AWT, Swing, JavaFX & SWT 5
Kr0e Image schärfen AWT, Swing, JavaFX & SWT 2
R Bild drehen UND skalieren (Image bzw BufferedImage) AWT, Swing, JavaFX & SWT 5
T Image auf Image zeichnen AWT, Swing, JavaFX & SWT 2
E Warum ist offscreen (mit Image) schneller? AWT, Swing, JavaFX & SWT 11
G Swing Image speichern / 0 Byte AWT, Swing, JavaFX & SWT 7
H Image abspeichern AWT, Swing, JavaFX & SWT 4
B Swing Image als Hintergrund im JInternalFrame - Problem AWT, Swing, JavaFX & SWT 3
W Image in jar einbauen AWT, Swing, JavaFX & SWT 20
Luk10 AWT Image und die Skalierung! AWT, Swing, JavaFX & SWT 3
L JPanel als Image speichern AWT, Swing, JavaFX & SWT 3
Developer_X Image Texels filtern AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben