当我想从我的图书馆中选择照片,并且最初对这张照片做一些事情我想裁剪它并调整到300x300。一切都好,直到我选择一张大照片。
当我选择一个大图像(10000x6000)PhotoChooserTask
什么都不做时(从用户的角度来看),PhotoChooserTask
只是崩溃(不是应用程序)。然后,当我尝试选择另一个时,我得到"Not allowed to call Show() multiple times before an invocation returns"
例外。
似乎PhotoChooserTask
内部仍有上一个对象,我不知道如何处置或清除PhotoChooserTask
。
PS。没有设置
chooser.PixelHeight = 300;
chooser.PixelWidth = 300;
照片会设置,一切正常。
PS2。
三星ATIV S没有问题。只有诺基亚1320,520和530
PhotoChooserTask chooser = new PhotoChooserTask();
try
{
chooser.ShowCamera = true;
chooser.PixelHeight = 300;
chooser.PixelWidth = 300;
chooser.Completed += (s, result) =>
{
if (result.Error != null){ return; }
if (result.ChosenPhoto != null)
{
var bitmap = new BitmapImage();
bitmap.SetSource(result.ChosenPhoto);
Service.uploadPhoto(receiver, (ImageSource)bitmap);
}
};
chooser.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
当照片很大且设置了高度时,调试器不会进入chooser.Completed
内部
答案 0 :(得分:1)
图像尺寸可能是问题所在。
10000x6000的图像本身将占用大约240MB(每像素10000 * 6000 * 4字节)。内存大量可能导致使用PhotoChooserTask
的应用程序崩溃而不会向您的应用返回任何内容。
答案 1 :(得分:1)
一种可能的解决方案是首先将所选照片保存为质量较低或分辨率相同的jpeg,但使用Cimbalino Phone Toolkit中的高压缩方法(如SavePng()方法)对其进行压缩,然后裁剪图像。
我用它将240mb Image转换为8mb然后在其上应用效果。