当前位置: 代码迷 >> J2SE >> java调用摄像头有关问题
  详细解决方案

java调用摄像头有关问题

热度:94   发布时间:2016-04-24 00:30:36.0
java调用摄像头问题
将网上的Java调用摄像头代码整理后如下,但为什么拍好后总是一片黑,什么都没有?请高手帮忙看下,谢谢..
Java code
package com.xie.can;import java.awt.BorderLayout;import java.awt.Component;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.FileOutputStream;import javax.media.Buffer;import javax.media.CaptureDeviceInfo;import javax.media.CaptureDeviceManager;import javax.media.Manager;import javax.media.MediaLocator;import javax.media.Player;import javax.media.control.FrameGrabbingControl;import javax.media.format.VideoFormat;import javax.media.util.BufferToImage;import javax.swing.JApplet;import javax.swing.JButton;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;import com.sun.image.codec.jpeg.JPEGImageEncoder;class CanTest extends JApplet{    public static Player player = null;    private CaptureDeviceInfo di = null;    private MediaLocator ml = null;//    文档中提供的驱动写法,为何这么写我也不知:)    public void init()    {        String str1 = "vfw:Logitech USB Video Camera:0";        String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";        di = CaptureDeviceManager.getDevice(str2);        ml = di.getLocator();        try        {            player = Manager.createRealizedPlayer(ml);            player.start();            Component comp;            if ((comp = player.getVisualComponent()) != null)            {                add(comp, BorderLayout.NORTH);            }        }        catch (Exception e)        {         e.printStackTrace();        }    }}class Pai{    private JButton capture;    private Buffer buf = null;    private BufferToImage btoi = null;    private ImagePanel imagpanel = null;    private Image img = null;    private ImagePanel imgpanel = null;    public void pi()    {//        JComponent c = (JComponent) e.getSource();//        if (c == capture)//如果按下的是拍照按钮 //        {             imgpanel = new ImagePanel();            FrameGrabbingControl fgc =(FrameGrabbingControl)CanTest.player.getControl("javax.media.control.FrameGrabbingControl");            buf = fgc.grabFrame(); // 获取当前祯并存入Buffer类            btoi = new BufferToImage((VideoFormat) buf.getFormat());            img = btoi.createImage(buf); // show the image             imgpanel.setImage(img);//        }    }}class ImagePanel extends JApplet{    public void setImage(Image img)    {        int imgWidth = 200 , imgHeight = 300;        //BufferedImage bi = (BufferedImage)createImage(imgWidth, imgHeight);        BufferedImage bi = new BufferedImage(800,600,BufferedImage.TYPE_INT_BGR);        //System.out.println(bi);        Graphics2D g2 = bi.createGraphics();        g2.drawImage(img, null, null);        String s = "c:/1.jpg";        FileOutputStream out = null;        try        {            out = new FileOutputStream(s);        }        catch (java.io.FileNotFoundException i)        {            System.out.println("File Not Found");        }        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);        param.setQuality(1f, false);//不压缩图像        encoder.setJPEGEncodeParam(param);        try        {            encoder.encode(bi);            out.close();        }        catch (java.io.IOException io)        {            System.out.println("IOException");        }    }}public class Main{    public static void main(String[] args)    {        CanTest ct = new CanTest();        Pai p = new Pai();        ct.init();        p.pi();            }}


------解决方案--------------------
我有几个代码,可以成功调用摄像头,是用C++和Java来做的,我做了点点修改

需要的话给我发邮件,交个朋友

csdxqzp@163.com
  相关解决方案