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

2025-10-23 20:35:15

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

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

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

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

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

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

}

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

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

}

            }

        }

}

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

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

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

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

}

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

7、把转换成swt-image对象画在面板当中:

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

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

8、在初始化当中启动截图线程:

new jietu().start();

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

9、增加“拍照”代码,把swt-image对象保存在文件当中:

ImageLoader loa=new ImageLoader ();

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

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

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

10、运行项目,点击“拍照”,把截图保存在c:\swtimage.jpg这个文件中。

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

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢