• 【WP7】调用系统LED灯


    通过使用相机的闪光灯,我们可以用来做一些类似手电筒的应用,但是WP7 SDK并没有提供调用系统LED灯的API

    通过几天的尝试和搜索,终于让LED灯开了,感谢Den DelimarskyTomas Hounsell

    How VideoCamera/PhotoCamera content is saved on Windows Phone 7

    Not your regular photo and video camera on Windows Phone 7

    Avoiding Reflection: Adding the InteropServices library to the WP7 SDK

    开启闪光灯两种途径

    1、拍照对焦

      通过自定义相机应用PhotoCamera,调用相机的Focus方法,可以让闪光灯开启1秒钟左右,连续调用Focus方法虽然能保持开启闪光灯,但是会出现闪烁,而且对相机的伤害比较大

    2、录像

      在录像的时候可以打开闪光灯,但是微软并没有为我们提供关于自定义摄像功能的应用。但是还是有办法的,下面介绍这种方法

    方法:

    首先程序要用到一个库,后面有下载:

    Microsoft.Phone.Media.Extended.dll

    修改该库文件的名字为Microsoft.Phone.Media.Extended.dll,复制到WP7 SDK的库文件存放目录中

    C:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71

    C:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\RedistList 目录下找到 FrameworkList.Xml文件

    找到

    <File AssemblyName="Microsoft.Phone.Interop" Version="7.0.0.0" PublicKeyToken="24eec0d8c86cda1e" Culture="neutral" ProcessorArchitecture="MSIL" InGac="false" />

    改 “Microsoft.Phone.Interop” 为“Microsoft.Phone.InteropServices”,删除 “PublicKeyToken”属性  

    <File AssemblyName="Microsoft.Phone.InteropServices" Version="7.0.0.0" Culture="neutral" ProcessorArchitecture="MSIL" InGac="false" />

       注意:需要管理员的权限才能修改,(我是复制到外面来,修改完后替换掉原来那个)

    到这里Microsoft.Phone.Media.Extended.dll就可以使用了(可以使用VideoCamera类了)

    2)强名称

    使用Visual Studio的sn.exe工具,对DLL文件进行强名称验证,打开MSDOS命令行窗口或VS的命令行提示窗口,输入命令(复制粘贴即可)。注意运行命令行窗口时必须选择以“管理员身份运行”的模式(鼠标右键菜单中有)。

    sn -Vr "C:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\Microsoft.Phone.Media.Extended.dll"

      下面说说VideoCamera类的使用

    使用到的命名空间

      using Microsoft.Phone;

    声明变量

      VideoCamera vCam;
      CameraVisualizer cView;

    实例化(一般放在OnNavigatedTo函数中)

      注意:需要一个CameraVisualizer对象来配合VideoCamera作为其视频输出,否则VideoCamera不能正常工作,在主线程中创建CameraVisualizer并最后调用其SetCource方法将VideoCamera对象传入后,才能使用VideoCamera对象 

        vCam = new VideoCamera(CameraSource.PrimaryCamera);
    
        cView = new CameraVisualizer();
        cView.Visibility = System.Windows.Visibility.Collapsed;
    cView.SetSource(vCam);

    使用VideoCamera的闪光灯

        if (vCam.IsRecording)
        {
            vCam.StopRecording();
        }
        else
        {
            vCam.LampEnabled = true;
            vCam.StartRecording();
        }

    在不适用VideoCamera的时候应该释放对资源的占用(一般在OnNavigatedFrom函数中)

        if (vCam != null)
        {
            if (vCam.IsRecording)
                vCam.StopRecording();
            vCam.Dispose();
            vCam = null;
        }
        if (cView != null)
        {
            LayoutRoot.Children.Remove(cView);
            cView = null;
        }
        GC.Collect();

     关于VideoCamera的使用请大家自行探索吧,此处不详讲

    最后说明一下:此方法实现的应用程序不能提交通过应用商店的验证,据说可以把Microsoft.Phone.Media.Extended.dll链接库通过反射的方法加载到全局缓存中(不太懂),然后调用,好像可以通过认证,大家可以试试,欢迎交流

  • 相关阅读:
    css3新特性合集
    前端面试必备的css盒子模型
    激动人心的第一天啊
    Simulink 自动代码生成原理
    什么是 Target Language Compiler
    A*算法 (MATLAB) -路径搜索
    路径搜索 – Dijkstra 算法 (MATLAB实现)
    客户端测试
    test
    【AtCoder Regular Contest 110 选做】D
  • 原文地址:https://www.cnblogs.com/bomo/p/2751754.html
Copyright © 2020-2023  润新知