Windows Phone開發(23):啟動器與選取器之CameraCaptureTask和PhotoChooserTask

來源:互聯網
上載者:User

這兩個組件都屬於選取器,而且它們也有很多相似的地方,最明顯的上一點,它們都是用來選擇圖片。

 

 

一、CameraCaptureTask選取器。

 

它用於啟動照相機,當你拍下照片後,自動把照的位元組流返回給調用方應用程式。前文說過,啟動器和選擇的使用方法和步驟都是一樣的。對於CameraCaptureTask組件也如此,不過注意的一點是,處理Completed事件時一定要記住,儘可能的使用頁面類的Dispatcher.BeginInvoke方法,因為非同步回調直接存取UI元素是不安全的,極有可能會引發異常,但我不是說絕對。

 

<Grid><br /> <Grid.RowDefinitions><br /> <RowDefinition Height="*"/><br /> <RowDefinition Height="auto"/><br /> </Grid.RowDefinitions><br /> <Image x:Name="img" Grid.Row="0" Stretch="Uniform"<br /> HorizontalAlignment="Stretch"<br /> VerticalAlignment="Stretch"/><br /> <Button x:Name="btnCamera" Grid.Row="1"<br /> Content="啟動相機程式" Click="btnCamera_Click"/><br /> </Grid><br />

 

using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Net;<br />using System.Windows;<br />using System.Windows.Controls;<br />using System.Windows.Documents;<br />using System.Windows.Input;<br />using System.Windows.Media;<br />using System.Windows.Media.Animation;<br />using System.Windows.Shapes;<br />using Microsoft.Phone.Controls;<br />// 引入以下命名空間。<br />using Microsoft.Phone.Tasks;<br />using System.Windows.Media.Imaging;</p><p>namespace PhoneApp1<br />{<br /> public partial class MainPage : PhoneApplicationPage<br /> {<br /> // 第一步,聲明類層級的局部變數,並執行個體化。<br /> CameraCaptureTask MyCamera = new CameraCaptureTask();</p><p> // 建構函式<br /> public MainPage()<br /> {<br /> InitializeComponent();</p><p> // 第二步,在頁面建構函式中註冊完成回調事件<br /> MyCamera.Completed += new EventHandler<PhotoResult>(MyCamera_Completed);<br /> }</p><p> private void btnCamera_Click(object sender, RoutedEventArgs e)<br /> {<br /> // 第三步,顯示組件<br /> MyCamera.Show();<br /> }</p><p> // 第四步,處理事返回結果<br /> void MyCamera_Completed(object sender, PhotoResult e)<br /> {<br /> // 確定使用者確認了還是取消了操作。<br /> if (e.TaskResult == TaskResult.OK)<br /> {<br /> // 從返回的流中建立圖象<br /> BitmapImage bmp = new BitmapImage();<br /> try<br /> {<br /> bmp.SetSource(e.ChosenPhoto);<br /> // 把圖象作為Image控制項的源。<br /> // 防止非同步回調直接存取UI元素,故應使用BeginInvoke方法。<br /> Dispatcher.BeginInvoke(() =><br /> {<br /> this.img.Source = bmp;<br /> });<br /> }<br /> catch (Exception ex)<br /> {<br /> MessageBox.Show(ex.Message);<br /> }</p><p> }<br /> }<br /> }<br />}

 

當然,在模擬器中你是不能進行拍攝的,但可以進行類比操作,也就是說無論你拍的什麼,最後都是返回同一張照片。

 

 

 

 

二、PhotoChooserTask選取器。

 

這個選取器已經包含CameraCaptureTask的功能,當然,它主要是為了選擇圖片。

1、ShowCamera屬性設定是否顯示可以讓使用者啟動相機的按鈕;

2、PixelHeight:選擇圖片後將其裁剪的高度;

3、PixelWidth屬性與上面相同,裁剪寬度。

照片被選擇後,以流的形式返回,駝過Completed事件的參數PhotoResult的ChosenPhoto屬性擷取。

 

<Grid><br /> <Grid.RowDefinitions><br /> <RowDefinition Height="*"/><br /> <RowDefinition Height="auto"/><br /> </Grid.RowDefinitions><br /> <Image x:Name="img" Stretch="Uniform" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0"/><br /> <Grid Grid.Row="1"><br /> <Grid.ColumnDefinitions><br /> <ColumnDefinition Width="auto"/><br /> <ColumnDefinition Width="auto"/><br /> <ColumnDefinition Width="auto"/><br /> <ColumnDefinition Width="auto"/><br /> </Grid.ColumnDefinitions><br /> <Grid.RowDefinitions><br /> <RowDefinition Height="auto"/><br /> <RowDefinition Height="auto"/><br /> </Grid.RowDefinitions><br /> <TextBlock Grid.Column="0" Grid.Row="0" Text="高度:"/><br /> <TextBlock Grid.Column="2" Grid.Row="0" Text="寬度:"/><br /> <TextBox x:Name="txtHeight" Grid.Column="1"<br /> Grid.Row="0" Width="160" Height="auto" FontSize="20"><br /> <TextBox.InputScope><br /> <InputScope><br /> <InputScopeName NameValue="Number"/><br /> </InputScope><br /> </TextBox.InputScope><br /> </TextBox><br /> <TextBox x:Name="txtWidth" Grid.Column="3"<br /> Grid.Row="0" Width="160" Height="auto" FontSize="20"><br /> <TextBox.InputScope><br /> <InputScope><br /> <InputScopeName NameValue="Number"/><br /> </InputScope><br /> </TextBox.InputScope><br /> </TextBox><br /> <CheckBox x:Name="chkShowCamera"<br /> Grid.Row="1" Grid.ColumnSpan="2"<br /> Content="顯示啟動相機"/><br /> <Button x:Name="btnShow"<br /> Grid.Column="2" Grid.Row="1"<br /> Grid.ColumnSpan="2"<br /> Content="選擇圖片..."<br /> Margin="5"<br /> Click="btnShow_Click"/><br /> </Grid><br /> </Grid><br />
using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Net;<br />using System.Windows;<br />using System.Windows.Controls;<br />using System.Windows.Documents;<br />using System.Windows.Input;<br />using System.Windows.Media;<br />using System.Windows.Media.Animation;<br />using System.Windows.Shapes;<br />using Microsoft.Phone.Controls;<br />//<br />using Microsoft.Phone.Tasks;<br />using System.Windows.Media.Imaging;</p><p>namespace PhoneApp1<br />{<br /> public partial class Page1 : PhoneApplicationPage<br /> {<br /> PhotoChooserTask ptc = new PhotoChooserTask();</p><p> public Page1()<br /> {<br /> InitializeComponent();</p><p> ptc.Completed += new EventHandler<PhotoResult>(ptc_Completed);<br /> }</p><p> void ptc_Completed(object sender, PhotoResult e)<br /> {<br /> if (e.TaskResult == TaskResult.OK)<br /> {<br /> BitmapImage bmp = new BitmapImage();<br /> try<br /> {<br /> bmp.SetSource(e.ChosenPhoto);<br /> Dispatcher.BeginInvoke(() => {<br /> this.img.Source = bmp;<br /> });<br /> }<br /> catch (Exception ex)<br /> {<br /> MessageBox.Show(ex.Message);<br /> }<br /> }<br /> }</p><p> private void btnShow_Click(object sender, RoutedEventArgs e)<br /> {<br /> // 設定相關屬性<br /> ptc.PixelHeight = int.Parse(txtHeight.Text);<br /> ptc.PixelWidth=int.Parse(txtWidth.Text);<br /> ptc.ShowCamera = this.chkShowCamera.IsChecked.HasValue ? chkShowCamera.IsChecked.Value : false;</p><p> ptc.Show();<br /> }<br /> }<br />}

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.