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...
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
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;
}
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
Zuletzt bearbeitet: