java+jmf怎么使用摄像头拍照-摄像头截图

 java怎么利用jmf中的功能使摄像头可以或许拍摄照片,下面我分享一下怎么建造。

1、启动摄像头。

2、截取摄像头当前画面:awt-image。

3、把awt-image对象转换当作swt-image对象。

4、摄影:把当前截图保留在文件傍边。

我写的经验对你进修 java有帮忙的话,给我投票或者保藏!

http://v.youku.com/v_show/id_XMzk1OTYyNTYyNA==.html

0java利用jmf媒体框架挪用摄像头在窗口上显示

0安装媒体框架jmf2-1-1

工具/原料

  • eclipse mars 2
  • jmf 2-1-1

方式/步骤

  1. 1

    新建一个 swt-java项目:paizhao,把jmf包含的jar文件增添在项目中。

  2. 2

    新建一个窗口文件,把面板和按钮增添在窗口中。

  3. 3

    在open方式中,打开摄像头:

    CaptureDeviceManager.getDevice("vfw:Microsoft WDM Image Capture (Win32):0");

    MediaLocator med=new MediaLocator("vfw://0");

    try {

    player=Manager.createRealizedPlayer(med);

    if(player.getVisualComponent()!=null){

    player.start();

    }

    } catch (NoPlayerException e) {

    // TODO 主动生当作的 catch 块

    e.printStackTrace();

    } catch (CannotRealizeException e) {

    // TODO 主动生当作的 catch 块

    e.printStackTrace();

    } catch (IOException e) {

    // TODO 主动生当作的 catch 块

    e.printStackTrace();

    }

    0java利用jmf媒体框架挪用摄像头在窗口上显示

  4. 4

    新建一个线程,刷新面板把摄像头的截丹青在面板傍边:

    public class jietu extends Thread{

    public jietu(){

                this.setDaemon(true);

            }

    public void run(){

                while (true) {

                Display.getDefault().asyncExec(new Runnable() {

                public void run() {

                composite.redraw();

                   }          

                });

                try {

    sleep(80);

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

                }

            }

    }

  5. 5

    在面板中paint方式对摄像头截图:

    Composite co=(Composite)e.getSource();

    FrameGrabbingControl fgc=(FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");

    Buffer buffer=fgc.grabFrame();

    BufferToImage bti=new BufferToImage((VideoFormat)buffer.getFormat()); 

    java.awt.Image awtimage=bti.createImage(buffer);

  6. 6

    把截图awt-image转当作swt-image对象:

    BufferedImage bi=(BufferedImage)awtimage;

    ByteArrayOutputStream bs=new ByteArrayOutputStream();

    try {

    ImageIO.write(bi, "jpg", bs);

    InputStream is=new ByteArrayInputStream(bs.toByteArray());

    swtimage=new Image(shell.getDisplay(),is);

    e.gc.drawImage(swtimage, 0, 0, swtimage.getBounds().width, swtimage.getBounds().height, 0, 0, co.getBounds().width, co.getBounds().height);

    } catch (IOException e1) {

    // TODO 主动生当作的 catch 块

    e1.printStackTrace();

    }

  7. 7

    把转换当作swt-image对象画在面板傍边:

    e.gc.drawImage(swtimage, 0, 0, swtimage.getBounds().width, swtimage.getBounds().height, 0, 0, co.getBounds().width, co.getBounds().height);

  8. 8

    在初始化傍边启动截图线程:

    new jietu().start();

  9. 9

    增添“摄影”代码,把swt-image对象保留在文件傍边:

    ImageLoader loa=new ImageLoader ();

    loa.data=new ImageData[]{swtimage.getImageData()};

    loa.save("c:/swtimage.jpg", SWT.IMAGE_JPEG);

  10. 10

    运行项目,点击“摄影”,把截图保留在c:\swtimage.jpg这个文件中。

  • 发表于 2018-12-12 00:00
  • 阅读 ( 228 )
  • 分类:电脑网络

相关问题

0 条评论

请先 登录 后评论