windows phone 使用相機並擷取圖片(3)

來源:互聯網
上載者:User

使用相機需要引用如下命名空間

using Microsoft.Phone.Tasks;

 在這個案例中我們還用到了BitmapImage類,所以我們需要引用命名空間

using System.Windows.Media.Imaging;

 如下

 

 MainPage.xaml檔案在初始化的基礎上添加了兩個元素

<TextBlock x:Name="txtName" Text="啟動相機" Grid.Row="1" ></TextBlock>
        <Image x:Name="img" Grid.Row="1" Margin="12,10,12,0" ></Image>

 程式碼後置檔案

using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using Microsoft.Phone.Controls;//引用using System.Windows.Media.Imaging;using Microsoft.Phone.Tasks;namespace CameraShoot{    public partial class MainPage : PhoneApplicationPage    {        //相機捕獲任務執行個體        CameraCaptureTask cameraCT = new CameraCaptureTask();        // 建構函式        public MainPage()        {            InitializeComponent();            //手機拍照功能完成後調用            cameraCT.Completed += new EventHandler<PhotoResult>(cameraCT_Completed);        }        //重寫觸控螢幕事件        protected override void OnManipulationStarted(ManipulationStartedEventArgs e)        {            //知識點①            if (e.OriginalSource==txtName)            {                //調用相機                cameraCT.Show();            }            //知識點②            //觸摸事件完成             e.Complete();            //知識點③            //不在向父元素傳遞            e.Handled = true;            //知識點④            base.OnManipulationStarted(e);        }        //完成        void cameraCT_Completed(object sender, PhotoResult e)        {            if (e.TaskResult==TaskResult.OK)            {                BitmapImage bmp = new BitmapImage();                //知識點⑤                //擷取包含檔案流的和Source不同                bmp.SetSource(e.ChosenPhoto);                //設定圖片源                img.Source = bmp;                txtName.Text = e.OriginalFileName;            }        }    }}

 

CameraCaptureTask 派生自ChooserBase

其中CameraCaptureTask,有兩個比較實用的方法,也就是我們這裡用到的

   Show; 調用相機功能

  Completed ;相機拍攝完成之後可被調用

 

   知識點①:該事件中的e是指,通過該事件傳遞過來的參數,所以我們可以從中擷取一些資訊,屬性OriginalSource表示產生該事件的元素(在windows phone 中都稱之為元素而非控制項);

   知識點②:這裡調用了Completed方法,加上該方法之後,系統就不會處理相應的路由事件了,這裡是指重寫的OnManipulationStarted事件 ;

   知識點③: e.Handled = true; 該屬性設定表示該路由事件已經處理完畢,不需要在向視覺化樹狀結構的上一層傳遞;

   知識點④:調用本方法的基類方法,雖然在這裡重寫了基類方法,但是不可避免的在基類完成的基礎性操作,重寫沒有完成,這樣操作會出現一些錯誤

   知識點⑤:利用SetSource設定的源一定是Stream流,wp支援png和jpeg格式

 這些都是在模擬器上的的操作,如果在真機上測試,請在測試前關閉ZUNE,也可移步

http://www.cnblogs.com/fwind/archive/2011/11/28/2265890.html

  總結:使用相機是直接調用CameraCaptureTask類的show方法,這樣相機就開啟了,直到圖片產生,再調用Completed方法,在Completed方法中獲得 PhotoResult中該圖片的stream 並作為位元影像的源,並設定image的源;當前圖片的檔案名稱也就是PhotoResult的屬性OriginalFileName,得到的檔案名稱為該圖片的完整路徑

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.