手机图片库
操作手机图片库是一种常见的操作,在手机中运行的程序可以通过下列两种方法来访问该图片库:
1.从程序角度看,PhotoChooserTask与CameraCaptureTask非常类似,但是它会引导用户进入图片库并选择照片,然后将选择结果返回给程序
下面代码片段演示如何打开照片选择器应用程序和选择照片后返回的处理:
PhotoChooserTask photoChooser = new PhotoChooserTask();
photoChooser.Completed += OnPhotoChooserCompleted; //添加选择器完成时事件触发
photoChooser.PixelWidth = 100;
photoChooser.PixelHeight = 100;
photoChooser.Show();//打开照片选择器
BitmapImage bitmapImage = new BitmapImage(); //用于下面的示例
void OnPhotoChooserCompleted(object sender, PhotoResult args)
{
if (args.Error == null && args.ChosenPhoto != null)
{//确实选择了照片时
Stream stream = args.ChosenPhoto; //获取包含照片数据的流
bitmapImage.SetSource(stream);
...
}
...
}
2.XNA命名空间Microsoft.Xna.Framework.Media具有MediaLibrary类及其相关类,它们能够使程序获得储存在图片库中所有图片的集合,并将它们呈现给用户
下面代码片段演示如何保存位图到图片库:
WriteableBitmap writeableBitmap = new WriteableBitmap(bitmapImage); //这里的bitmapImage是一个BitmapImage对象
MemoryStream memoryStream = new MemoryStream(); //内存流
writeableBitmap.SaveJpeg(memoryStream, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 75); //经压缩,这样就比没压缩要节省空间
memoryStream.Position = 0;
MediaLibrary mediaLib = new MediaLibrary();
mediaLib.SavePicture(filename, memoryStream); //参数filename是要保存的文件名称,这是要注意的是文件权限问题
访问图片库里面的图片Picture对象:
PictureCollection picCollection = mediaLib.SavedPictures; //获取媒体库中图片的集合
Picture pic = picCollection[0]; //访问指定Picture对象,当然也可以经过循环的方式来访问