/// <summary> /// 将实体类改变为ViewModel类. /// </summary> public static ComposePhotoViewModel CreateFromModel(Photo model) { ComposePhotoViewModel viewModel = new ComposePhotoViewModel() { Name = model.Name, MediaStream = model.ThumbnailStream, PhotoDuration = (int)(model.PhotoDuration.TotalSeconds) }; if (model.Transition != null) { viewModel.Transition = model.Transition; viewModel.TransitionDuration = (int)(model.Transition.TransitionDuration.TotalSeconds); } return viewModel; }
/// <summary> /// 读取指定的story. /// </summary> /// <param name="storyName">story名称.</param> /// <param name="userStore">如果参数为null, 创建一个新的.</param> internal static void ReadStoryFile(string storyName, IsolatedStorageFile userStore = null) { if (userStore == null) { userStore = IsolatedStorageFile.GetUserStoreForApplication(); } using (IsolatedStorageFileStream fileStream = userStore.OpenFile(storyName + ".xml", System.IO.FileMode.Open)) { XDocument xdoc = XDocument.Load(fileStream); var picturesLibrary = new MediaLibrary().Pictures; // Load all photos. foreach (XElement photoElement in xdoc.Root.Elements()) { try { Photo photo = new Photo() { Name = photoElement.Attribute("Name").Value, }; string photoDurationString = photoElement.Attribute("PhotoDuration").Value; int photoDuration = int.Parse(photoDurationString); photo.PhotoDuration = TimeSpan.FromSeconds(photoDuration); XElement transitionElement = photoElement.Element("Transition"); if (transitionElement != null) { photo.Transition = TransitionBase.Load(photoElement.Element("Transition")); } Picture picture = picturesLibrary.Where(p => p.Name == photo.Name).FirstOrDefault(); if (picture == null) { // 如果找不到原文件,可能已经被删除了 // TODO: 我们需要记录错误吗? 我们是继续下一个图片还是抛出异常? continue; } photo.ThumbnailStream = picture.GetThumbnail(); App.MediaCollection.Add(photo); } catch { // TODO: 我们需要记录错误吗? 我们是继续下一个图片还是抛出异常? continue; } } } }
private void OKButton_Click(object sender, System.EventArgs e) { this.StoreSelection(); // 添加所有选中的图片到App.MediaCollection. foreach (ChoosePhotoViewModel photo in this._selectedPhotos) { Photo photoModel = new Photo() { Name = photo.Name, ThumbnailStream = photo.MediaStream, PhotoDuration = TimeSpan.FromSeconds(5d), Transition = TransitionFactory.CreateDefaultTransition() }; if (!App.MediaCollection.Contains(photoModel)) { App.MediaCollection.Add(photoModel); } } // 回到调用页面 this.NavigationService.GoBack(); }
/// <summary> /// 从XNA媒体库中获取的原始图像。 /// 并调整其大小的目标分辨率。 /// 调用BitmapHelper.GetResizedImage内部。 /// 不同的是此方法返回WriteableBitmap的, /// 而BitmapHelper.GetResizedImage返回流。 /// 此方法还设置Photo.ResizedImage和Photo.ResizedImageStream。 /// </summary> /// <param name="photo">图片需要被重设.</param> /// <returns>一个WriteableBitmap图片需要被重新设置.</returns> private WriteableBitmap GetResizedImage(Photo photo) { Stream resizedImageStream = BitmapHelper.GetResizedImage(photo.Name); WriteableBitmap resizedImage = new WriteableBitmap(BitmapHelper.ResizedImageWidth, BitmapHelper.ResizedImageHeight); resizedImage.SetSource(resizedImageStream); photo.ResizedImageStream = resizedImageStream; photo.ResizedImage = resizedImage; return resizedImage; }