Einzelne Pixel in einem Bild lesen

Status
Nicht offen für weitere Antworten.

keman

Mitglied
Hallo!

Ich hab ein kleines Java-Programm geschrieben, das jeden einzelnen Pixel eines Bildes herausliest und wiedergibt, so dass ein neues Bild entsteht. Beim lesen jedes einelnen Pixels kann ich bestimmte Bildeffekte einfügen, das simpleste Beispiel ist der schwarz-weiss-Effekt.
Das Programm funktioniert, jedoch ist getPixelColor() (jenen Teil hab ich aus einer Page kopiert) viel zu langsam, bei einem 100x100 Bild geht es ja noch, aber bei grösseren Bildern, auch nur 150x150 hat das Programm mehrere Minuten um jeden einzelnen Pixel zu lesen und neu zu zeichnen.

Meine Frage: Gibt es etwas schnelleres als dieser grausame Code, aus dem getPixelColor() besteht, oder ist das Lesen jedes einzelnen Pixels einer völlig gestörte Idee? (Bitte fragt nicht wieso ich nicht javax.media.jai oder sonstige spezifische Image-Bibliotheken verwende, um zu den Bildern effekte einzufügen ;) ).

Code:
// Hier wird das Bild ohne Veränderungen neugezeichnet
public Image createImage() {
BufferedImage bi = new BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB);
Graphics g = bi.createGraphics();
for (int x = 0; x < image.getWidth(this); x++) {
for (int y = 0; y < image.getHeight(this); y++) {
Color nextColor = getPixelColor(image, x, y);
int new_r = nextColor.getRed();
int new_g = nextColor.getGreen();
int new_b = nextColor.getBlue();
Color newColor = new Color(new_r, new_g, new_b);
g.setColor(newColor);
g.drawLine(x, y, x, y);
}
}
return bi;
}

// Diesen Teil hab ich aus dem Internet kopiert, funktioniert aber problemlos
public Color getPixelColor(Image im, int x, int y) {
int[] pix = new int[1];
PixelGrabber pg = new PixelGrabber(im, x, y, 1, 1, pix, 0, 0);
try {
pg.grabPixels();
} catch (InterruptedException e) {
e.printStackTrace();
}
return new Color((pix[0] >> 16) & 0xff, (pix[0] >> 8) & 0xff,
(pix[0]) & 0xff);
}
 

FatFire

Bekanntes Mitglied
Wenn Du sowieso das Bild in einem BufferedImage hast, warum nutzt Du nicht gleich getRGB(int x, int y) und setRGB(int x, int y, int rgb) die einem das BufferedImage bietet? Ich bin mir nicht ganz sicher, ob das was Du vorhast damit möglich ist...aber beim groben Überfliegen wüßte ich jetzt auch nicht, was dagegen spricht :wink:

P.S.: Nein, keine Sorge, das Lesen und Schreiben eines Bildes Pixel für Pixel ist keineswegs gestört.
 

keman

Mitglied
Wie verwendet man getRGB() verwenden :D ?


Dies gibt nämlich ein schönes aber leider unbrauchbares komplett weisses Bild aus :( :

Code:
int rgb = bi.getRGB(x, y);
Color nextColor = new Color(rgb);
 

FatFire

Bekanntes Mitglied
Hm, okay, wenn man das Thema schonmal durch hatte und weiß wo es steht, dann ist das natürlich noch besser (ich bin ja auch noch nicht so lange dabei)...aber wenigstens der Weg war der Richtige. Danke Egon. :D
 

Marco13

Top Contributor
Das langsame ist 1. die scheußliche Methode "getPixelColor" (für jeden Pixel wird dort ein Color-Objket erstellt) und 2. der scheußliche Rest. Dort wird nämlich NOCHMAL für jeden Pixel ein Color-Objekt erstellt (was nicht nur langsam, sondern auch überflüssig ist) und das Zeichnen einer Linie ist wesentlich aufwändiger, als das Setzen eines Pixels (auch wenn die Linie nur die Länge 1 hat)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Zugriff auf einzelne Objekte Spiele- und Multimedia-Programmierung 12
F einzelne Polygone(Graphics) schneller als and. Fig. zeichnen Spiele- und Multimedia-Programmierung 3
BraunBerry Java Game Pixel "einfärben" Spiele- und Multimedia-Programmierung 6
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
Q Mehr objekte darstellen als Pixel vorhanden Spiele- und Multimedia-Programmierung 6
Androbin Pixel-genaue Kollisionserkennung Spiele- und Multimedia-Programmierung 5
J Bestimmte Pixel transparent erscheinen lassen Spiele- und Multimedia-Programmierung 5
M pixel auslesen in JOGLE Spiele- und Multimedia-Programmierung 3
B Java Pixel Malen Spiele- und Multimedia-Programmierung 3
M Pixel eines BufferedImage bearbeiten (Performance) Spiele- und Multimedia-Programmierung 23
Kr0e OpenGL .. Pixel Buffer Objekt oder Frame Buffer Object? Spiele- und Multimedia-Programmierung 2
Steev LWJGL: org.lwjgl.LWJGLException: Pixel format not accelerated Spiele- und Multimedia-Programmierung 9
M pixel perfect collision detection bei rotierenden Bildern Spiele- und Multimedia-Programmierung 13
G Pixel setzen mit TYPE_INT_ARGB Spiele- und Multimedia-Programmierung 10
D cm in pixel Spiele- und Multimedia-Programmierung 37
R int[] der Pixel aus PNG oder JPG ? Spiele- und Multimedia-Programmierung 2
P Bild, Pixel- / Bereichsfarbe auslesen Spiele- und Multimedia-Programmierung 12
G Pixel Häufigkeiten entsprechent einfärben Spiele- und Multimedia-Programmierung 6
S BMP-Bild Pixel für Pixel bearbeiten Spiele- und Multimedia-Programmierung 1
V Tranzparente Pixel Spiele- und Multimedia-Programmierung 5
S Pixel zeichnen Spiele- und Multimedia-Programmierung 3
G 2 dim. Pixel Array in AWT? Spiele- und Multimedia-Programmierung 7
E Rendering order auf einem ismetrischen Grid Spiele- und Multimedia-Programmierung 8
P Wie kann ich einem Programm hinter eine GUI verstecken? Spiele- und Multimedia-Programmierung 12
J (Libgdx) animation nur einmal in einem Event aufrufen Spiele- und Multimedia-Programmierung 1
B Programmieren wie der Befehl /ban in Minecraft geblockt wird aber nicht /ban mit einem Argument Spiele- und Multimedia-Programmierung 1
P selectedItem aus einem Methodenerstellten JPanel auslesen. Spiele- und Multimedia-Programmierung 5
O Problem beim Aufrufen des Spiels von einem Menü Spiele- und Multimedia-Programmierung 7
G Entity Verwaltung in einem 2D Spiel Spiele- und Multimedia-Programmierung 1
G Collision Detection in einem 2D Sandbox Game. Spiele- und Multimedia-Programmierung 2
E Einem A*-Pfad folgen Spiele- und Multimedia-Programmierung 27
G Auf einem Stick bewegen Spiele- und Multimedia-Programmierung 5
windl MP3-Tags von einem Inputstream auslesen Spiele- und Multimedia-Programmierung 5
U DPI von einem Bild definieren Spiele- und Multimedia-Programmierung 5
X Erklärung zu einem Tic Tac Toe Spiel Spiele- und Multimedia-Programmierung 1
C Hilfe bei einem Mosaikspiel Spiele- und Multimedia-Programmierung 16
M [JOGL] Maus über einem gezeichnetem Objekt abfragen? Spiele- und Multimedia-Programmierung 5
P Winkel von einem Punkt zum anderen berechnen Spiele- und Multimedia-Programmierung 9
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
S Java3D: Primitives zu einem Objekt kombinieren Spiele- und Multimedia-Programmierung 7
Fl4sh1 Datum und Uhrzeit von einem Ereignis ausgeben lassen Spiele- und Multimedia-Programmierung 3
P Frage zu einem Projekt "Einarmiger Bandit" 3 Walzen / 9 Zeichnungen BLUEJ Spiele- und Multimedia-Programmierung 10
K Grundsätzlicher Spieleaufbau an (m)einem Beispiel Spiele- und Multimedia-Programmierung 4
S Problem mit Sichtfeld/Licht in einem Raster Spiele- und Multimedia-Programmierung 5
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
A Drehen von einem Image Spiele- und Multimedia-Programmierung 4
F Bot updaten von einem Browser game Spiele- und Multimedia-Programmierung 7
W Java3D: Kanten die hinter einem Objekt liegen werden gezeigt Spiele- und Multimedia-Programmierung 2
B Reset bei einem Spiel Spiele- und Multimedia-Programmierung 16
C auf einem PC kein mp3 unter Java Spiele- und Multimedia-Programmierung 6
A Steuerung des Bewegungsflusses bei einem Netzwerkspiel Spiele- und Multimedia-Programmierung 18
R Mehrere Shader in einem Program Spiele- und Multimedia-Programmierung 8
B Generierung einer Wertetabelle aus einem Bild Spiele- und Multimedia-Programmierung 3
Z Kugeln aufgrund von Daten aus einem Array verschieben Spiele- und Multimedia-Programmierung 2
S Probleme mit JMenu in einem JFrame mit BufferStrategy Spiele- und Multimedia-Programmierung 2
K Kanten anzeigen lassen in einem Shape3D-Objekt Spiele- und Multimedia-Programmierung 4
A Interaktion von J3D in einem Applet Spiele- und Multimedia-Programmierung 4
N In einem Kasten springende Bälle programmieren...Hilfe Spiele- und Multimedia-Programmierung 7
H Speichern und Öffnen von einem Zeichenprogramm Spiele- und Multimedia-Programmierung 4
A Wie kann ich die Dateigröße aus einem tiff auslesen? Spiele- und Multimedia-Programmierung 2
hdi mehrere Threads/Tasks in einem synchronisieren -> TaskPoo Spiele- und Multimedia-Programmierung 36
N Farberkennung und -ersetzung in einem Bild Spiele- und Multimedia-Programmierung 2
F Umsetzung von einem Partikelsystem Spiele- und Multimedia-Programmierung 4
J Java3D Rotationsproblem bei einem 3D-Maennchen Spiele- und Multimedia-Programmierung 3
B Frage zur Spielsteuerung bei einem rundenbasiertes Spiel Spiele- und Multimedia-Programmierung 5
K Seitenlänge aus einem Würfel lesen Spiele- und Multimedia-Programmierung 3
T Kollisionsabfrage von einem Stein mit einem Ball Spiele- und Multimedia-Programmierung 5
G Einen gif oder jpg Datei aus einem Graphics Objekt o. JFrame Spiele- und Multimedia-Programmierung 2
A 3D Gegenstand in einem 2D Koordinatensystem darstellen. Spiele- und Multimedia-Programmierung 3
K Hilfe bei Grafikeinbindung in einem Spiel Spiele- und Multimedia-Programmierung 6
D Image.getGraphics() in einem Frame Spiele- und Multimedia-Programmierung 4
G Bufferimage bei einem Frame Spiele- und Multimedia-Programmierung 4
I Zweite Kamera in einem SimpleUniverse Spiele- und Multimedia-Programmierung 6

Ähnliche Java Themen

Neue Themen


Oben