Datenmatrix in Bild verwandeln

Zwergenwerfer

Neues Mitglied
Hallo zusammen,

bisher bin ich mit Java Basics auf der Arbeit gut ausgekommen jetzt brauche ich einen Tipp für den einfachsten Weg, um mir die richtigen Dinge beizubringen.

Eine Infrarotkamera erstellt eine .csv mit den Temperaturen für jeden Pixel. Ein Javaprogramm den Zielbereich soll erkennen und die dortige Temperaturverteilung bewerten.
Dies funktioniert bereits.

Mein Problem: Ich brauche den erkannten Zielbereich noch einmal grafisch. Momentan mache ich dies per Exel über Färben Wenn per Hand für jedes Bild. Ich bin mir sicher das geht mit Java besser.

Was ist der einfachste Weg aus einer als int Array vorliegenden 80x60 Matrix eine Bilddatei zu erzeugen deren Farben wertabhängig sind? Ein 2 Farbverlauf würde bereits genügen.
 
Die klasse bufferedimage ist was du suchst! Du kannst ein bild aus daten eines rasters erstellen. Siehe dazu die java api, dort steht alles gut beschrieben, ich glaube es war die methode getdatabufferint() mit der sich das array erzeugen lässt und mit get/setpixel() kannst du einzzelne pixel verändern und erfragen

lg
 
Zuletzt bearbeitet:
Hier ein kleines Beispiel:
Java:
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
int[] pixelData = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();

// Wenn die Datenmatrix eindimensional vorliegt, als double[] mit Werten 0-1, könnte schon folgendes funktionieren:

for(int i = 0; i < width * height; i++)
    pixelData[i] = new Color((int) (matrix[i] * 255), 0, 0, 1).getRGB();

// Läge die Matrix als 2dimensionales Array vor, müsste man sowas machen:

for(int i = 0; i < width * height; i++)
    pixelData[i] = new Color((int) (matrix[i % width][i / width] * 255), 0, 0, 1).getRGB();

// Das Bild müssen wir natürlich noch speichern:
ImageIO.write(image, "PNG", new File("Kamerabild.png"));
 
Zuletzt bearbeitet:
Danke.
Leider steige ich da nicht ganz durch.

Die Daten liegen als 2-dimensionales Array mit Int-Werten von 0-1500 vor.
Kann ich im Rahmen der Normierung auch % also Float von 0-100 zeichnen?

Code:
int[] pixelData = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();

Diesen Code bekomme ich nicht auseinandergedröselt.
Müsste ich nicht erstmal
Java:
 DataBufferInt(int[][] dataArray,           int size)
benutzen?

Ich schlaf nochmal drüber
 
Danke.
Leider steige ich da nicht ganz durch.

Die Daten liegen als 2-dimensionales Array mit Int-Werten von 0-1500 vor.
Kann ich im Rahmen der Normierung auch % also Float von 0-100 zeichnen?
Die Farbwerte müssen zwischen 0 und 255 liegen. Also müsstest Du z.B. so rechnen:
[c](int) ((float) matrix[i % width][i / width] / 1500 * 255)[/c]

Code:
int[] pixelData = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();

Diesen Code bekomme ich nicht auseinandergedröselt.
Müsste ich nicht erstmal
Java:
 DataBufferInt(int[][] dataArray,           int size)
benutzen?

Ich schlaf nochmal drüber

Das ist ein simpler Cast. Als Mehrzeiler sähe das so aus:
Java:
DataBuffer buffer = bi.getRaster().getDataBuffer();
DataBufferInt bufferInt = (DataBufferInt) buffer;
int[] pixelData = bufferInt.getData()
 

Zurück
Oben