1

当我想从我的库中挑选照片并最初对这张照片做一些事情时,我想裁剪它并将其调整为 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

4

2 回答 2

1

图像大小可能是问题所在。

10000x6000 的图像本身将占用大约 240MB 的内存(每像素 10000 * 6000 * 4 字节)。该内存量可能导致使用 的应用程序PhotoChooserTask崩溃并且不向您的应用程序返回任何内容。

于 2015-01-20T16:10:40.623 回答
1

一种可能的解决方案是首先将所选照片保存为较低质量或相同分辨率的 jpeg,但使用 Cimbalino Phone Toolkit 中的 SavePng() 方法等高压缩方法对其进行压缩,然后裁剪图像。

我用它将 240mb 图像转换为 8mb,然后对其应用效果。

于 2015-01-29T12:08:14.130 回答