BufferedImage#setRGB #getRGB zu langsam

Status
Nicht offen für weitere Antworten.
T

tuxedo

Gast
Hi,

ich stehe gerade vor dem Problem, dass ein

Code:
myPixelBlock = myBufferedImage.getRGB(x, y, blockWidth, blockHeight, myPixelBlock , 0, blockWidth);

und

Code:
myBufferedImage.setRGB(x,y,blockWidth,blockHeight,myPixelBlock ,0,blockWidth);

zu viel Zeit verschlingt.

Ich hab gelesen dass das mit dem Raster, das das BUfferedImage anbietet schneller gehen soll. Habs aber irgendie nicht hinbekommen. Folgendes wirft mir immer eine ArrayIndexOutOfBounds Exception

Code:
myPixelBlock = myBufferedImage.getRaster().getPixels(x, y, blockWidth, blockHeight, myPixelBlock );

X und Y sind valide Werte innerhalb des Bildes (1024x768 großes Bild). blockWidth und blockHeight haben fixe Werte von jeweils 5. Und myPixelBlock ist ein eindimensionales Array der Länge 25 (=5*5).

Hintergrund ist:

Ich hab ein Bild A und ein Bild B. Und mittels eines noch recht naiven Algorithmuses, will ich herausfinden, welche Stellen sich in Bild B von Bild A unterscheiden.

Dazu zerteile ich jeweils Bild A und B in gleichgröße Klötzchen (5x5 Pixel) und vergleiche die Klötzchen miteinander. Da ich aber sehr viele Folgebilder hab, muss das sehr oft geschehen. Und wenn dann getRGB() und setRGB als Spassbremse da stehen, geht dem Programm schnell die Puste aus.

Weiß jemand wie ich möglichst effizient Rechtecke aus einem Bild extrahieren kann damit ich solche Blöcke miteinander vergleichen kann (vergleichen geht zur Zeit deutlich schneller als das extrahieren)?

gruß
Alex
 

Ark

Top Contributor
Code:
BufferedImage img=blubb();
int[] buf=((DataBufferInt)img.getRaster().getDataBuffer()).getBankData()[0];
Ob es sich um DataBufferInt oder andere DataBuffer handelt, hängt vom gewählten Farbmodell ab (also ob 24 Bit Farbe oder 16 Bit Farbe oder 1 Bit S/W usw.), beachte dazu einfach die Beschreibungen der Konstanten, die du beim Konstruktor eines BufferedImages benötigst. Auch die Verteilung, also in welchen Bits der ints welche Farben zu finden sind, ist da beschrieben (z.B. 888-RGB oder 565-RGB oder 888-BGR, so in der Art). Die Koordinaten sind, glaube ich, nach dem Muster buf[x+width*y] verteilt (zumindest bei 888-RGB, ich kann mich aber auch irren).

Ark
 
T

tuxedo

Gast
D.h. ich muss mir da dann mein Rechteckausschnitt wieder "aufwendig" aus dem eindimensionalen Array zusammensuchen?!

- Alex
 

Ark

Top Contributor
alex0801 hat gesagt.:
D.h. ich muss mir da dann mein Rechteckausschnitt wieder "aufwendig" aus dem eindimensionalen Array zusammensuchen?!
Das hast du ganz richtig erkannt. Nun kannst du direkt im Array vergleichen, ohne irgendwelche Methodenaufrufe, die neue Objekte nach sich ziehen, ertragen zu müssen. Wenn man sich dabei geschickt anstellt, sind auch nur wenige Multiplikationen (u.U. sogar keine einzige!) nötig, um die Ausschnitte zu vergleichen. Wenn man dann noch Aussagen über die stochastische Verteilung zur Hand hat, sollten die Berechnungen relativ fix gehen.

Ark
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B BufferedImage Position Spiele- und Multimedia-Programmierung 8
B BufferStrategy zu BufferedImage? Irgendwie? Spiele- und Multimedia-Programmierung 2
D getsubimage aus BufferedImage und Rueckwandlung in ein ImagePlus bild Spiele- und Multimedia-Programmierung 0
V BufferedImage[] aus anderer Classe auslesen Spiele- und Multimedia-Programmierung 2
F [JMyron] Bild von int[] zu BufferedImage Spiele- und Multimedia-Programmierung 2
Q BufferedImage vs. Heap Space ‒ Warum wird der Speicher nicht freigegeben? Spiele- und Multimedia-Programmierung 6
M Performance Problem bei BufferedImage Spiele- und Multimedia-Programmierung 7
R BufferedImage > Integer.MAX_VALUE Spiele- und Multimedia-Programmierung 9
M Pixel eines BufferedImage bearbeiten (Performance) Spiele- und Multimedia-Programmierung 23
G BufferedImage -> Farbe wechselt willkürlich Spiele- und Multimedia-Programmierung 15
P int-Array zu BufferedImage (performance?) Spiele- und Multimedia-Programmierung 14
agentone BufferedImage transparent löschen Spiele- und Multimedia-Programmierung 12
radiac Stringtext mit BufferedImage Textur. Spiele- und Multimedia-Programmierung 6
kowa BufferedImage und Antialias Spiele- und Multimedia-Programmierung 2
J Zeichnen in BufferedImage und dieses in Datei speichern Spiele- und Multimedia-Programmierung 2
A Image in BufferedImage konvertieren Spiele- und Multimedia-Programmierung 2
Z Transparenz in BufferedImage Spiele- und Multimedia-Programmierung 8
Z JME - Rendering in BufferedImage Spiele- und Multimedia-Programmierung 14
A Bildbereich als BufferedImage Spiele- und Multimedia-Programmierung 3
M BufferedImage blass machen Spiele- und Multimedia-Programmierung 5
Lulumann6 BufferedImage in VolatileImage casten Spiele- und Multimedia-Programmierung 10
F BufferedImage verursacht OutOfMemoryError Spiele- und Multimedia-Programmierung 11
P Rotation von BufferedImage (Affine Transformation) Spiele- und Multimedia-Programmierung 7
S Image to BufferedImage Spiele- und Multimedia-Programmierung 3
H image.setRGB() zeichnet falsch Spiele- und Multimedia-Programmierung 3
F getRGB liefert andere Werte als PS? Spiele- und Multimedia-Programmierung 8

Ähnliche Java Themen


Oben