Hi,
mit folgendem Code lade ich per Webcam ca. 15 mal pro sekunde ein Bild in den Buffer umd dann daraus die RGB werte von verschiedenen Pixeln auszulesen. Ich würde das Bild was im Buffer liegt gleichzeitig auch gerne in einem GUI ausgeben, damit ich die Ausgabe nachvollziehen kann.
Ich habe leider keine erfahrung mit dem Schreiben von GUI's, weswegen ich euch gerne fragen wollte. Wie kann ich mir das Bild aus dem Buffer jede 1/10 Sekunde in einem GUI erneuernd wiedergeben?
Ich würde mich über Hilfe sehr freuen und bedank mich schon einmal.
Gruß toti [/code]
mit folgendem Code lade ich per Webcam ca. 15 mal pro sekunde ein Bild in den Buffer umd dann daraus die RGB werte von verschiedenen Pixeln auszulesen. Ich würde das Bild was im Buffer liegt gleichzeitig auch gerne in einem GUI ausgeben, damit ich die Ausgabe nachvollziehen kann.
Code:
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.media.*;
import javax.media.control.*;
import javax.media.format.*;
import javax.media.util.*;
import com.sun.image.codec.jpeg.*;
import com.sun.media.protocol.v4l.DataSource;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.media.Buffer;
import javax.imageio.ImageIO;
/**
*
* @author Google, NetBeans
*/
public class Main extends Canvas
{
public static void main(String[] args) throws Exception
{
// Device festlegen
CaptureDeviceInfo deviceInfo = CaptureDeviceManager.getDevice("v4l:Logitech QuickCam EC:0");
if(deviceInfo == null)
{
System.out.println("no device found");
}
Player player = Manager.createRealizedPlayer(deviceInfo.getLocator());
player.start();
// Kurz warten, soll sonst angeblich lags bringen
Thread.sleep(2500);
System.out.println("Wait: Ende");
while(true)
{
// FrameGrab
FrameGrabbingControl frameGrabber = (FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");
Buffer buf = frameGrabber.grabFrame();
// Als Bild in en Buffer schieben
Image img = (new BufferToImage((VideoFormat)buf.getFormat()).createImage(buf));
BufferedImage buffImg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
g.drawImage(img, null, null);
/* Als PNG oder Jpeg spichern
ImageIO.write(buffImg, "png", new File("test.png")); */
int left = buffImg.getRGB(20, 110);
Color leftc = new Color(left);
int right = buffImg.getRGB(300, 110);
Color rightc = new Color(right);
if((leftc.getGreen() < 20) && (rightc.getGreen() > 20))
{
System.out.println("Links");
}
if((rightc.getGreen() < 20) && (leftc.getGreen() > 20))
{
System.out.println("Rechts");
}
if((rightc.getGreen() > 20) && (leftc.getGreen() > 20))
{
System.out.println("Gerade aus");
}
/* System.out.println("Red: " + c.getRed());
System.out.println("Green: " + c.getGreen());
System.out.println("Green: " + c.getGreen()); */
}
/* Alles stoppen
player.close();
player.deallocate();
System.exit(0); */
}
}
Ich habe leider keine erfahrung mit dem Schreiben von GUI's, weswegen ich euch gerne fragen wollte. Wie kann ich mir das Bild aus dem Buffer jede 1/10 Sekunde in einem GUI erneuernd wiedergeben?
Ich würde mich über Hilfe sehr freuen und bedank mich schon einmal.
Gruß toti [/code]