none
关于phone7的闪光灯控制 RRS feed

  • 问题

  • 刚刚入门phone7学习,想试着开发一个手机电筒,但是遇到一点问题,希望坛友们不吝赐教

     

    在xaml中画了一个butCol按钮,双击它进入butCol_Click()方法..

     

    语句如下

     

    using System.Windows;
    using Microsoft.Devices;
    using Microsoft.Phone.Controls;
    
    namespace light
    {
      public partial class MainPage : PhoneApplicationPage
      {
        public MainPage()
        {
          InitializeComponent();
        }
    
        private void butCol_Click(object sender, RoutedEventArgs e)
        {
          PhotoCamera cam = new PhotoCamera();
          if (string.Equals(butCol.Content, "开灯"))
          {
    
            cam.FlashMode = FlashMode.On;
            butCol.Content = "关灯";
          }
          else
          {
            cam.FlashMode = FlashMode.Off;
            butCol.Content = "开灯";
          }
        }
       
      }
    }
    


    但是在模拟器中打开,单击按钮,程序就退出了.应该是代码有问题吧.

     

     PhotoCamera cam = new PhotoCamera();
    

     

    这段代码应该在哪里实例化呢?


    非常感谢

    2011年7月3日 11:51

答案

全部回复

  • 你好

    看來是沒有完全初始化 這個 PhotoCamera cam這個元件所以造成的

    或者你可以參考以下這個Code [可以令到程式不會退出..但是我不懂怎樣可以做到把閃光燈做成小電筒這個動作]

    你需要在你的XAML 上加入一個 Rectangle 在Rectangle入面 加入VIDEOBRUSH

    E.G

    <Rectangle Width="320" Height="240" 
              HorizontalAlignment="Left" 
              x:Name="viewfinderContainer">
    
          <Rectangle.Fill>
            <VideoBrush x:Name="viewfinderBrush" />
          </Rectangle.Fill>
        </Rectangle>
    

    之後以下的Code 可以用來初始化這個 PhotoCamera的

    E.G.

     PhotoCamera cam = new PhotoCamera();
        public MainPage()
        {
          InitializeComponent();
    
          cam.Initialized += new EventHandler<Microsoft.Devices.CameraOperationCompletedEventArgs>(cam_Initialized);
    
          //Event is fired when the capture sequence is complete
          cam.CaptureCompleted += new EventHandler<CameraOperationCompletedEventArgs>(cam_CaptureCompleted);
    
          //Event is fired when the capture sequence is complete and an image is available.
          cam.CaptureImageAvailable += new EventHandler<Microsoft.Devices.ContentReadyEventArgs>(cam_CaptureImageAvailable);
    
          //Event is fired when the capture sequence is complete and a thumbnail image is available.
          cam.CaptureThumbnailAvailable += new EventHandler<ContentReadyEventArgs>(cam_CaptureThumbnailAvailable);
          viewfinderBrush.SetSource(cam);
        }
    
        void cam_Initialized(object sender, Microsoft.Devices.CameraOperationCompletedEventArgs e)
        {
    
        }
    
        void cam_CaptureCompleted(object sender, CameraOperationCompletedEventArgs e)
        {
    
        }
    
        void cam_CaptureImageAvailable(object sender, Microsoft.Devices.ContentReadyEventArgs e)
        {
    
        }
    
        public void cam_CaptureThumbnailAvailable(object sender, ContentReadyEventArgs e)
        {
    
        }
    


    之後加入你原有的Code

     private void butCol_Click(object sender, RoutedEventArgs e)
      {
    //   PhotoCamera cam = new PhotoCamera(); //這句不用了..因為之前已初始化了
       if (string.Equals(butCol.Content, "开灯"))
       {
    
        cam.FlashMode = FlashMode.On;
        butCol.Content = "关灯";
       }
       else
       {
        cam.FlashMode = FlashMode.Off;
        butCol.Content = "开灯";
       }
      }
    

    有關PhotoCamera的使用方法可Sample可以參考以下URL

    http://msdn.microsoft.com/en-us/library/hh202956(v=vs.92).aspx#Y3300

    Please correct me if my concept is wrong

     


    Chi
    2011年7月3日 14:56
  • 感谢回答.

     

    让我意外的事,按照您的方法试验后程序仍然退出了.(模拟器上,真机未试验).

     

    另外,我的目标是让真机摄像头的闪光灯亮起来.充当手电筒.

     

    我发现我犯了一个错误,

    cam.FlashMode = FlashMode.On;
    这段代码并不是让闪光灯亮起来,而是告诉相机在启动时打开闪光灯.

    这并不符合我的要求.

    不知道在芒果中是否仍然不能直接操作闪光灯

    也就是MS未提供这个API?

    2011年7月3日 17:10
  • 你好

    或者你可以嘗試一下我的Sample 看看是不是結果一樣 WP7MangoSample

    https://skydrive.live.com/?cid=66398506b8d4b8bf&sc=documents&uc=1&nl=1&id=66398506B8D4B8BF%21176#

    我在電腦/手機上測過.. 沒大問題出現

    如果你想令到 閃光燈亮起來你可以嘗試 用cam.Focus(). 這個動作..可惜只會亮800 MS的

    要使用FLASHLIGHT 做小電筒..看來還未可以直接用API做到

    Please correct me if my concept is wrong


    Chi
    2011年7月3日 19:24
  • 你好,运行出现以下错误
    Error 1 Could not find a part of the path 'D:\Document\VS2010\Mango\WP7MangoSample\WP7MangoSample\Properties\WMAppManifest.xml'. Please rebuild the solution and try again.
    我想这是你的项目路径,但是我没有在工程中找到相应的位置,所以无法更改,如何解决?
    2011年7月4日 2:12
  • 另外请问你一下你的开发机是?
    2011年7月4日 2:12
  • 你好

    或者你可以嘗試 COPY 這個MAINPAGE.XAML 和 CSHARP 檔便可以了..

    E.G. CREATE 一個新PROJECT 之後加入這2個檔案試試看

    我的開發機是 SAMSUNG OMINA 7

     


    Chi
    2011年7月4日 5:07