20 Haziran 2009 Cumartesi

Java Media Framework (JMF) 'te USB Webcam'den JPEG Yakalamak

Bu yazının başlığında yaşadığım dil sıkıntısını bu blog'da sürekli yaşayacağım. Anlaşıldı. Tamam. TUBİTAK tarzı kelime uydurmalara, soğuk teknik bir dil kullanmaya mecbur olacağım zamanlar olacaktır. İşte o ahval ve şeraitte dahi...

Java ile bilgisayarınıza USB portundan bağlı bir kameradan resim almak istiyorsanız, işte size kullanabileceğiniz bir örnek. JMF, Java Image I/O ve Java Advanced Imaging (JAI) ile ilgili daha sonra daha detaylı yazacağım.



import java.io.*;

import java.awt.image.BufferedImage;
import java.awt.Graphics2D;
import java.awt.Image;

import javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Manager;
import javax.media.Player;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;

import javax.imageio.ImageIO;

public class TestQuickCamPro
{
public static void main(String[] args) throws Exception{
// Webcam hangi isimle kayıtlıysa o isimle buluyoruz
CaptureDeviceInfo deviceInfo = CaptureDeviceManager.getDevice("vfw:Microsoft WDM Image Capture (Win32):0");
Player player = Manager.createRealizedPlayer(deviceInfo.getLocator());
player.start();
// Kameranın başlaması için 2.5 saniye bekle (yoksa img==null oluyor)

Thread.sleep(2500);
System.out.println("Resim yakalanıyor.");
FrameGrabbingControl frameGrabber = (FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");

// Bir kare yakala
Buffer buf = frameGrabber.grabFrame();
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);
// Diske JPG olarak kaydet
ImageIO.write(buffImg, "jpg", new File("C:\\webcam.jpg"));

player.close();
player.deallocate();

System.out.println("Bitti.");
}

}

Hiç yorum yok:

Yorum Gönder