我希望用户显示所选图像的列表:
void photoChooserTask_Completed(object sender, PhotoResult e)
{
if (e.TaskResult == TaskResult.OK)
{
var fileName = e.OriginalFileName;
var photoStream = e.ChosenPhoto;
}
}
和
<Image Source="{Binding PhotoStream}" Width="200" Height="200"/>
问题是在选择4或5张图像后,app会达到内存限制并退出。我只是想显示那些选定图像的缩略图,比如PhotoHub,如何在不消耗大量内存的情况下做到这一点?感谢
答案 0 :(得分:1)
正如评论中提到的,有几种方法可以解决它,正如你所提到的,你可能需要一个缩略图。以下是我现在可以想到的一些方法,可以解决你的记忆问题:
方法1:
首先使用MediaLibrary
查找相同的图片,您将获得缩略图版本的流,如下所示:
void task_Completed(object sender, Microsoft.Phone.Tasks.PhotoResult e)
{
if (e.TaskResult == Microsoft.Phone.Tasks.TaskResult.OK)
{
MediaLibrary library = new MediaLibrary();
Picture pic = library.Pictures.Where(p => e.OriginalFileName.EndsWith("\\" + p.Album.Name + "\\" + p.Name)).FirstOrDefault();
Stream thumbnailStream = pic.GetThumbnail(); // Stream to a thumbnail
}
}
要实现此功能,您还需要在ID_CAP_MEDIALIB_PHOTO
中启用功能WMAppManifest.xml
,否则您将无法获得任何结果。
方法2:
第二种选择是使用例如WriteableBitmapEx library来自己创建缩略图,类似于:
void task_Completed(object sender, Microsoft.Phone.Tasks.PhotoResult e)
{
if (e.TaskResult == Microsoft.Phone.Tasks.TaskResult.OK)
{
BitmapImage source = new BitmapImage();
source.SetSource(e.ChosenPhoto);
WriteableBitmap bitmap = new WriteableBitmap(source);
WriteableBitmap thumbnail = bitmap.Resize(100, 100, WriteableBitmapExtensions.Interpolation.Bilinear); // Creates a 100x100 thumbnail
}
}
其他方法:
另一个解决方案可能是使用Nokia Imaging SDK,根据文档支持部分JPEG解码(我自己也没有使用过这个SDK,所以现在不能给你任何示例代码) :
使用RAJPEG技术,无需解码整体即可访问图像数据 JPEG图像,用于快速预览,效果应用, 旋转和裁剪高分辨率图像。