# [JMyron] Bild von int[] zu BufferedImage



## Felix (19. Sep 2012)

Hallo,

ich habe mit Ach und Krach folgende Codezeilen gebastelt, mit deren Hilfe ich ein Bild von meiner Webcam aufnehmen will.


```
import JMyron.JMyron;

import java.awt.image.*;
import java.io.*;

import javax.imageio.ImageIO;

public class Main {
	public static void main(String[] args) {
		new Main(args);
	}

	public Main(String[] args) {
		JMyron m = new JMyron();
		System.out.println(m.version());
		m.start(640, 480);
		m.update();
		int image[] = m.image();

		BufferedImage bf = new BufferedImage(640, 480,
				BufferedImage.TYPE_INT_RGB);

		int i = 0;
		for (int x = 0; x < 640; x++) {
			for (int y = 0; y < 480; y++) {
				bf.setRGB(x, y, image[i]);
				i++;
			}
		}

		try {
			ImageIO.write(bf, "png", new File("screenshot.png"));
		} catch (Exception e) {
			e.printStackTrace();
		}

		m.stop();
	}

}[/Java]

Die Webcam springt auch an (die LED leuchtet).
Das Bild, welches gespeichert wird, enthält aber nichts als schwarze Pixel.

Kann mir jemand einen Tipp geben, was ich falsch mache?
Grüße, Felix

EDIT: Wie ich gerade feststelle betragen alle Werte im int-Array -16777216.
Eventuell mache ich etwas bei der Verwendung von JMyron falsch?
```


----------



## twseitex (21. Sep 2012)

Bilddatei JPG zu RGB-Werte bzw. Bild aus RGB-Werten erzeugen

 Also, ich habe folgendes Prinzip benutzt:

 1) Eine Bilddatei wird zu int-Feld aus RGB-Werten umgewandelt, per

 BufferedImage X06=null;
 int[][] X07=null;
 BufferedInputStream X08=null;



 Der gepufferten Inputstream der Datei im aktuellen Pfad ist zu erzeugen

 Mit diesem Stream (X08) dann Buffered Image (X06) füllen


 try
 {X06=ImageIO.read(X08);}
 catch (MalformedURLException e1)
 {
 ....

 }
 catch (IOException e2)
 {
 ....
 }

 // ----- BufferedInputStream schliessen
 try
 {X08.close();}
 catch (IOException e3)
 {
 // nichts
 }
 }

 Mit diesem buffered Image das int-Feld (X07) füllen

 {
 X07=new int[X01][X02];
 for(int i=0;i<X01;i++)
 {for(int j=0;j<X02;j++)
 {X07_[j]=X06.getRGB(i,j);}
 // nur Bildtyp BufferedImage.TYPE_INT_ARGB
 // RGB Standard-Colorspace also 32 Bit
 }
 }

 // int intRGBWert=....
 // int intBlau =(intRGBWert >> 0) & 0xff; // Bit 0-7
 // int intGruen =(intRGBWert >> 8) & 0xff; // Bit 8-15
 // int intGelb =(intRGBWert >> 16) & 0xff; // Bit 14-23
 // int intAlpha =(intRGBWert >> 24) & 0xff; // Bit 24-31

 return X07;


 2) RGB-Intfeld zu Buffered Image

 BufferedImage X04=null;

 X04=new BufferedImage(X01,X02,BufferedImage.TYPE_INT_ARGB);
 {
 for(int i=0;i<X01;i++)
 {for(int j=0;j<X02;j++)
 {X04.setRGB(i,j,X00[j]);}
 }
 }


 Ergo Komponenten benutzen, die Image-Daten verwalten und nicht reine Dateidaten.
 Und buffered arbeiten.

 Klar, das int-Feld habe ich auch als Stringfeld erzeugen lassen, also Text,
 den ich in den Javacode einbauen kann, so dass kleine JPD-Dateien nicht
 erst geladen werden müssen, sondern von string nach int-konvertiert dann
 zum java-verwalteten Bild. .... Für Bildfolgen von Webcams wohl nichts.
 Aber als Ersatz für aninmiertes GIF aus Folge von kleinen Bilddaten geht das
 schon mal (zu sehen in meinem Audio-Media-Player auf audio, flash and java)._


----------



## Marco13 (22. Sep 2012)

Die Umwandlung sollte einfach sein, das bringt aber nichts wenn man nicht die richtigen Eingabedaten bekommt. Zu diesem JMyron findet man auch recht wenig... Hilft's wenn man dort JMyron#settings aufruft?


----------

