当前位置:网站首页 > 创业 > 正文

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

0 张子豪 张子豪 2025-10-10 22:17 1

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

1、启动摄像头。

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

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

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

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

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

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

0安装媒体框架

东西/原料

  • 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();

    }

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

  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这个文件中。

来源:百闻(微信/QQ号:9397569),转载请保留出处和链接!


本文链接:https://www.ibaiwen.com/web/210804.html

张子豪

张子豪

TA很懒,啥都没写...

@百闻娱乐 本站部分内容转自互联网,若有侵权等问题请及时与本站联系,我们将在第一时间删除处理。 | 粤ICP备2024343649号 | (地图