软件下载 | 资讯教程 | 最近更新 | 下载排行 | 一键转帖 | 发布投稿
您的位置:最火下载站 > 电脑教程 > 编程开发 > 手机开发 > Windows Phone在隔离存储里存取图片文件

Windows Phone在隔离存储里存取图片文件

作为Windows Phone的初学者,第一个练手小应用是一个类似备忘录的软件,功能不是太多,涉及到即时任务,灵感,图文的一些记录。对于即时拍照然后附上相应描述再保存在独立存储里面,刚开始不太懂,搞了好几天(毕竟是新手),总算是搞定了,在此奉上关于照片存取的小小收获,给予像我一样的新手一点小小的帮助吧,也许对有些人有用而对有些人不值一提吧。

一共两个页面,第一个为MainPage.xaml,代码如下:

 1  <!--ContentPanel - place additional content here-->
2 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
3 <Image Name="PhotoImage" Height="342" HorizontalAlignment="Left" Margin="9,6,0,0" Stretch="Fill" VerticalAlignment="Top" Width="441"/>
4 <Button Name="SaveButton" Click="SaveButton_Click" Content="保存" Height="72" HorizontalAlignment="Left" Margin="7,482,0,0" VerticalAlignment="Top" Width="441">
5 <Button.Background>
6 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
7 <GradientStop Color="Black" Offset="0"/>
8 <GradientStop Color="#FFEB1818" Offset="1"/>
9 </LinearGradientBrush>
10 </Button.Background>
11 </Button>
12 <TextBlock Height="30" HorizontalAlignment="Left" Margin="27,442,0,0" Name="textBlock1" Text="输入照片名:" FontSize="25" VerticalAlignment="Top"/>
13 <TextBox Name="PhotoName" Height="72" HorizontalAlignment="Left" Margin="165,424,0,0" Text="" VerticalAlignment="Top" Width="284">
14 <TextBox.Background>
15 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
16 <GradientStop Color="Black" Offset="0"/>
17 <GradientStop Color="#FFD01818" Offset="1"/>
18 </LinearGradientBrush>
19 </TextBox.Background>
20 </TextBox>
21 <Button Name="TakePhotoButton" Click="TakePhotoButton_Click" Content="拍照" Height="72" Margin="9,366,8,0" VerticalAlignment="Top">
22 <Button.Background>
23 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
24 <GradientStop Color="Black" Offset="0"/>
25 <GradientStop Color="#FFD61212" Offset="1"/>
26 </LinearGradientBrush>
27 </Button.Background>
28 </Button>
29 </Grid>
30 </Grid>
31
32 <!--Sample code showing usage of ApplicationBar-->
33 <phone:PhoneApplicationPage.ApplicationBar>
34 <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
35 <shell:ApplicationBarIconButton IconUri="/Images/appbar.feature.search.rest.png" Text="查看" Click="ApplicationBarIconButton_Click"/>
36 </shell:ApplicationBar>
37 </phone:PhoneApplicationPage.ApplicationBar>

后台代码如下:

MainPage.xaml.cs

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Documents;
8 using System.Windows.Input;
9 using System.Windows.Media;
10 using System.Windows.Media.Animation;
11 using System.Windows.Shapes;
12 using Microsoft.Phone.Controls;
13 using Microsoft.Phone.Tasks;
14 using Microsoft.Phone;
15 using System.IO;
16 using System.IO.IsolatedStorage;
17
18 namespace 在隔离存储中存取照片
19 {
20 public partial class MainPage : PhoneApplicationPage
21 {
22 // Constructor
23 string filename;
24 byte[] _imageAsByte;
25 public MainPage()
26 {
27 InitializeComponent();
28 }
29
30 private void SaveButton_Click(object sender, RoutedEventArgs e)
31 {
32 filename = PhotoName.Text;
33 if (filename != ""&&PhotoImage.Source!=null)
34 {
35 using (var store = IsolatedStorageFile.GetUserStoreForApplication())
36 {
37 if (!store.FileExists(filename) || store.FileExists(filename) && MessageBox.Show("Overwrite the file?", "Question", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
38 {
39 using (var stream = store.CreateFile(filename))
40 {
41 stream.Write(_imageAsByte, 0, _imageAsByte.Length);
42 }
43 PhotoImage.Source = null;
44 PhotoName.Text = "";
45 NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative));
46 }
47 }
48 }
49 else
50 {
51 MessageBox.Show("Sorry,but you must take a photo and write the photo's name in the textbox!","Warning!",MessageBoxButton.OK);
52 }
53 }
54
55 private void TakePhotoButton_Click(object sender, RoutedEventArgs e)
56 {
57 CameraCaptureTask task = new CameraCaptureTask();
58 task.Completed += new EventHandler<PhotoResult>(task_Completed);
59 task.Show();
60 }
61
62 void task_Completed(object sender, PhotoResult e)
63 {
64 if (e.TaskResult == TaskResult.OK)
65 {
66 _imageAsByte = new byte[e.ChosenPhoto.Length];
67 e.ChosenPhoto.Read(_imageAsByte, 0, _imageAsByte.Length);
68 e.ChosenPhoto.Seek(0, SeekOrigin.Begin);
69 this.PhotoImage.Source = PictureDecoder.DecodeJpeg(e.ChosenPhoto);
70 }
71 }
72
73 private void ApplicationBarIconButton_Click(object sender, EventArgs e)
74 {
75 NavigationService.Navigate(new Uri("/Page1.xaml",UriKind.Relative));
76 }
77 }
78 }

效果如图所示:

同时还新建了一个照片文件的类,从IsolatedStorage里读取出照片及照片名再绑定到Page1.xaml中的ListBox中。类代码如下:

PhotoFile.cs

 1 using System;
2 using System.Net;
3 using System.Windows;
4 using System.Windows.Controls;
5 using System.Windows.Documents;
6 using System.Windows.Ink;
7 using System.Windows.Input;
8 using System.Windows.Media;
9 using System.Windows.Media.Animation;
10 using System.Windows.Shapes;
11
12 namespace 在隔离存储中存取照片
13 {
14 public class PhotoFile
15 {
16 public ImageSource Image { get; set; }
17 public string ImageName { get; set; }
18 }
19 }

第二个Page1.xaml,代码如下:

 1  <!--ContentPanel - place additional content here-->
2 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
3 <ListBox Height="550" HorizontalAlignment="Left" Margin="6,6,0,0" Name="listBox1" VerticalAlignment="Top" Width="460">
4 <ListBox.ItemTemplate>
5 <DataTemplate>
6 <Grid Margin="{StaticResource PhoneTouchTargetOverhang}">
7 <StackPanel Orientation="Horizontal">
8 <Image Source="{Binding Image}" Width="130" Height="120" Stretch="Fill"/>
9 <TextBlock Text="{Binding ImageName}" Foreground="Coral" FontSize="32" TextWrapping="Wrap" Width="300"/>
10 </StackPanel>
11 </Grid>
12 </DataTemplate>
13 </ListBox.ItemTemplate>
14 </ListBox>
15 </Grid>
16 </Grid>
17
18 <!--Sample code showing usage of ApplicationBar-->
19 <phone:PhoneApplicationPage.ApplicationBar>
20 <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
21 <shell:ApplicationBarIconButton IconUri="/Images/appbar.add.rest.png" Text="添加" Click="ApplicationBarIconButton_Click"/>
22 </shell:ApplicationBar>
23 </phone:PhoneApplicationPage.ApplicationBar>

后台代码:

Page1.xaml.cs

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Documents;
8 using System.Windows.Input;
9 using System.Windows.Media;
10 using System.Windows.Media.Animation;
11 using System.Windows.Shapes;
12 using Microsoft.Phone.Controls;
13 using System.IO;
14 using System.IO.IsolatedStorage;
15 using System.Windows.Media.Imaging;
16
17 namespace 在隔离存储中存取照片
18 {
19 public partial class Page1 : PhoneApplicationPage
20 {
21 IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication();
22 public Page1()
23 {
24 InitializeComponent();
25 }
26
27 private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
28 {
29 List<PhotoFile> filelist = new List<PhotoFile>();
30 if (file.GetFileNames() != null)
31 {
32 foreach (string filename in file.GetFileNames())
33 {
34 PhotoFile photo = new PhotoFile();
35 BitmapImage bmp = new BitmapImage();
36 using (IsolatedStorageFileStream filestream = file.OpenFile(filename, FileMode.Open, FileAccess.ReadWrite))
37 {
38 bmp.SetSource(filestream);
39 filestream.Flush();
40 filestream.Close();
41 photo.Image = bmp;
42 photo.ImageName = " 照片名:"+filename;
43 }
44 filelist.Add(photo);
45 }
46 listBox1.ItemsSource = filelist;
47 }
48 }
49
50 private void ApplicationBarIconButton_Click(object sender, EventArgs e)
51 {
52 NavigationService.Navigate(new Uri("/MainPage.xaml",UriKind.Relative));
53 }
54 }
55 }

运行效果如下:

希望对大家有所帮助,嘻嘻。祝大家WP开发更上一城楼,大家以后都去赚美刀!!!

本文来源:博客园

    相关阅读
    栏目导航
    推荐软件