首页 > 代码库 > JMF调用摄像头粉屏的问题(win10 64位系统)

JMF调用摄像头粉屏的问题(win10 64位系统)

最近突然想做一个人脸识别的程序,图像的获取可以从本地或者摄像头获取。

1、从本地获取比较简单,不多说。

2、从摄像头获取图片。网上查了一下,都是用的JMF(但是JMF已经很久没有更新,而且只支持32位的JDK,如果知道有更好的麻烦推荐一下!)

下载JMF(http://www.oracle.com/technetwork/java/javase/download-142937.html)

安装

安装完之后桌面上回出现JMStudio的快捷图标,

技术分享

 点开测试一下,file->capture;

技术分享

摄像头驱动正常加载,点击OK,然后

技术分享

我靠,这什么鬼?一片粉啊,一定要这么嫩吗 -_-||。 晃动一下窗口,会显示图像,但是是卡住的。

摄像头正常打开了,但是显示不了画面,这样完全没用啊!于是就去网上查了一下,没有答案,再看看回答时间,瞬间怀疑自己是不是用了个老古董了!

 

没办法,先试着写程序吧

 1 public static Component loadDiver() 
 2     {
 3         //String str1 = "vfw:logitech usb video camera:0";
 4         String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
 5         
 6         deviceInfo = CaptureDeviceManager.getDevice(str2);   //加载设备驱动
 7         mLocator = deviceInfo.getLocator();
 8         try
 9         {
10             
11             player = Manager.createRealizedPlayer(mLocator);  //获取就绪的播放器
12             
13             Component cp;
14             if((cp = player.getVisualComponent())!=null)
15             {
16                 player.start();
17                 return cp;                               //返回窗体组件
18             }
19         }
20         catch(Exception e)
21         {
22             e.printStackTrace();
23         }
24         return null;
25     }

运行之后发现一样出现粉屏的问题, 弄了一会儿发现好像在画面上覆盖了一层JLabel或者JTextArea就可以正常显示图像(感觉好low啊/捂脸),可能是打开的方式不对!

最后无意中发现,只要窗体对准电脑屏幕的最左边就可以正常显示了,这程序是不是有强迫症啊?_?

 

好吧,虽然莫名其妙,但是也勉强算是解决了显示问题了。

下面就是截图了,于是就用了笨办法,屏幕截图(求聪明的办法^_^):

 1 BufferedImage buffImg = null;
 2 try
 3 {
 4    buffImg = (new Robot()).createScreenCapture(new
 5    Rectangle(0, 100, c1.getWidth(), c1.getHeight()-100));   //c1是上面方法返回的Component
 6 }
 7 catch(AWTException e1)
 8 {
 9    e1.printStackTrace();
10 }
11 try
12 {
13    ImageIO.write(buffImg, "jpg", new File(path));
14 }
15 catch(IOException e1)
16 {
17    e1.printStackTrace();
18 }

成功获取图像

 

总结:JMF调用摄像头产生粉屏,把窗体放在屏幕最左侧可以正常显示,具体原因未知!个人猜测可能是系统不兼容的造成。

 

JMF调用摄像头粉屏的问题(win10 64位系统)