databuffer updates writableraster?

EvilHomy

Grünschnabel
Hallo liebe Leute.
Da habe ich mal wieder ein kleines Verständnisproblem.
Ich möchte gern ein BufferedImage manipulieren. Nun habe ich dazu gelesen, dass man das mit hilfe der Bestandteile dieses BufferedImage effektiv lösen kann.

Folgendes verwende Ich (in init()):
Code:
this.pixels = new int[size];
		
		int [] bandMasks = {0xFF0000, 0xFF00, 0xff, 0xff000000};
		dataBuffer = new DataBufferInt (this.pixels, size);
		writeRaster = Raster.createPackedRaster(dataBuffer, dim.width, dim.height, dim.width, bandMasks, null);
		colorModel = ColorModel.getRGBdefault();
		bImg = new BufferedImage(colorModel, writeRaster, false, null);

In paintComponent rufe ich nun dieses hier auf:
Code:
this.pixels = q.createPixels(true);
g2D.drawImage(bImg, null, 0, 0);

Ich hatte erwartet, dass sobald ich 'pixels' ändere, welches ja quelle für mein 'dataBuffer' ist, sich auch das BufferedImage ändert und dann beim 'drawimage' dieses auch auf den Bildschirm ausgegeben wird. Leider bleibt der bildschirm weiss bzw. grau.

Wenn ich aber alternativ das WritableRaster mittels
Code:
writeRaster.setDataElements (0, 0, dim.width, dim.height, q.createPixels(true));
ändere, wird diese Änderung dann auch auf dem Bildschirm ausgegeben.

Irgendwie kommt mir das aber doppelgemoppelt vor, da ich gelesen hatte, dass allein eine Änderung in meinem Fall in 'pixels' das BufferedImage updaten soll.

Ist das richtig?

Vielen Dank für eure Hilfe.
EH.
 
also ich habe bisher herausgefunden, dass eine Änderung in der "Quelle" des DataBuffers (bei mir 'pixels') tatsächlich das BufferedImage ändert.
So soll es ja auch sein.
Das Problem in meinem Fall scheint irgendwie mit Pointern zusammenzuhängen, von denen ich eigentlich dachte, dass es sie in Java nicht gibt.
Genauer gesagt liegt der Fehler in diesem Zusammenhang in meiner q.createPixels() methode oder wie ich mit ihr arbeite (Übergabe?).

Wenn jemand dazu was sagen kann wäre ich sehr glücklich.

MfG EH.
 
Zurück