求助关于java调用摄像头拍照怎样禁止虚拟摄像头拍照

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助关于java调用摄像头拍照怎样禁止虚拟摄像头拍照相关的知识,希望对你有一定的参考价值。

情况是这样的...拍照怎样写能禁止虚拟摄像头被java调用进行假的拍照,拍照功能要用什么去怎么样写...有什么解决办法么...感谢...

这个问题和java语言本身没啥关系。首先看你是用什么读取的摄像头来获得照片。
比如说你用flash来读取摄像头获得照片,那么有相关的api获得摄像头列表(此时的摄像头列表是全部的,包括虚拟摄像头的)
但是,你可以读取本地真实的摄像头(bs模式请用ocs控件读取,读取方式参照System.ManagementObject),然后比较真实的摄像头和现在正在拍照使用的摄像头即可。

真实实践过 望采纳。
参考技术A 额,这个有难度。

摄像头拍照功能是怎样实现的?自己动手做一个!

需求分析

现如今,拍照已经融入我们的日常生活中了。我们在日常的工作生活中很多场景都会用到拍照功能。比如在登录网页或者设备时,密码错误进行拍照,防止被盗。日常进行图像识别或者图像处理前的图像获取。都需要用到我们的摄像头进行图像的获取。

前期准备

  1. 带摄像头的电脑
  2. Visual Studio 2019
  3. AForge.NET Framework库文件

设计流程

  1. 首先我们在Visual Studio 2019创建一个工程
  2. 添加引用文件(不会使用AForge.NET Framework可以搜一下,网上例子很多)
  3. 设计自己的相关页面,其中关键在于videoSourcePlayer。这是引用文件里的
  4. 进行相关程序的编写,程序我放在后面。
  5. 运行打包(下面有我打包好的软件,可以点击看看运行结果)

实现效果

  1. 页面布局
  2. 点击连接,连接到自己电脑的摄像头
  3. 点击拍照,拍照成的图像,将保存在你防止的文件夹里。
    保存的文件夹在 GetImagePath()函数里
    可以这样写
                private string GetImagePath()
        {
      
            string personImgPath = "D:\\\\图片";
            if (!Directory.Exists(personImgPath))
            {
                Directory.CreateDirectory(personImgPath);
            }

            return personImgPath;
        }

命名(string picName = GetImagePath() + "\\\\" + "xiaosy" + ".jpg";

重要代码


        private void btnConnect_Click(object sender, EventArgs e)
        {
            CameraConn();
           
        }
        //连接摄像头
        private void CameraConn()
        {
            VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[tscbxCameras.SelectedIndex].MonikerString);
            videoSource.DesiredFrameSize = new System.Drawing.Size(320, 240);
            videoSource.DesiredFrameRate = 1;

            videoSourcePlayer.VideoSource = videoSource;
            videoSourcePlayer.Start();
        }

        //关闭摄像头
        private void btnClose_Click(object sender, EventArgs e)
        {
            videoSourcePlayer.SignalToStop();
            videoSourcePlayer.WaitForStop();
        }

        //主窗体关闭
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            btnClose_Click(null, null);
        }

        //拍照
        private void Photograph_Click(object sender, EventArgs e)
        {
            try
            {
                if (videoSourcePlayer.IsRunning)
                {
                    BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                                    videoSourcePlayer.GetCurrentVideoFrame().GetHbitmap(),
                                    IntPtr.Zero,
                                     Int32Rect.Empty,
                                    BitmapSizeOptions.FromEmptyOptions());
                    PngBitmapEncoder pE = new PngBitmapEncoder();
                    pE.Frames.Add(BitmapFrame.Create(bitmapSource));
                    string picName = GetImagePath() + "\\\\" + "xiaosy" + ".jpg";
                    if (File.Exists(picName))
                    {
                        File.Delete(picName);
                    }
                    using (Stream stream = File.Create(picName))
                    {
                        pE.Save(stream);
                    }
                    //拍照完成后关摄像头并刷新同时关窗体
                    if (videoSourcePlayer != null && videoSourcePlayer.IsRunning)
                    {
                        videoSourcePlayer.SignalToStop();
                        videoSourcePlayer.WaitForStop();
                    }
                    
                    this.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("摄像头异常:" + ex.Message);
            }
        }

        private string GetImagePath()
        {
            string personImgPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory)
                         + Path.DirectorySeparatorChar.ToString() + "PersonImg";
            if (!Directory.Exists(personImgPath))
            {
                Directory.CreateDirectory(personImgPath);
            }

            return personImgPath;
        }

源码及程序整合

  1. 工程源码
  2. 可直接点击进行运行的程序

后续

如果想了解更多物联网、智能家居项目知识,可以关注我的程序设计专栏
订阅专栏后,可以在微信公众号上私聊我,直接发给你源码。
或者关注公众号。
在这里插入图片描述

编写不易,感谢支持。

以上是关于求助关于java调用摄像头拍照怎样禁止虚拟摄像头拍照的主要内容,如果未能解决你的问题,请参考以下文章

android: 调用摄像头拍照

求助关于python的一些问题

求助关于python的一些问题

Unity怎样调用安卓手机摄像头实现拍照和录像

苹果7plus相机和美颜相机拍照正常,但微信拍照拍好后变成横的照片怎么回事?

用webview做的android客户端怎样调用摄像头拍照