【问题标题】:PhotoChooserTask cant crop big photoPhotoChooserTask 无法裁剪大照片
【发布时间】:2015-03-18 16:05:34
【问题描述】:

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

【问题讨论】:

    标签: c# windows-phone-7 windows-phone-8 photo tasker


    【解决方案1】:

    图像大小可能是问题。

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

    【讨论】:

    • 是的,但是当我没有在选择器上设置 PixelHight 和 PixelWidth 时(这意味着,不要在 PhotoChooserTask 中初始裁剪/调整图像大小),那么一切正常。我没问题,我不能设置这么大的照片,但是用户可以做任何事情,那么我该如何配置 PhotoChooserTask 让用户选择另一个?因为如果 PhotoChooserTask 迷恋用户在重新启动我的应用程序之前无法再次使用 PhotoChooserTask。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多