1

我正在开发一个用于在 C# 上为 Windows 8 Metro 处理照片的应用程序。现在我面临一个奇怪的问题。

首先,我通过 PickSingleFileAsync 选择文件,然后尝试通过 GetThumbnailAsync 获取缩略图:

FileOpenPicker openPicker = new FileOpenPicker ();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.Add (". jpg");
openPicker.FileTypeFilter.Add (". jpeg");
openPicker.FileTypeFilter.Add (". png");
StorageFile file = await openPicker.PickSingleFileAsync ();
if (file! = null)
{
    BitmapImage bitmapImage = new BitmapImage ();
    var thumb = await file.GetThumbnailAsync (ThumbnailMode.PicturesView, 150, ThumbnailOptions.UseCurrentScale);
    if (thumb! = null) bitmapImage.SetSource (thumb);
}

此代码适用于我的 HDD 上的文件或任何 MTP 设备(经过测试的相机和 Android 平板电脑),但不适用于 iPhone。这部分

var thumb = await file.GetThumbnailAsync (ThumbnailMode.PicturesView, 150, ThumbnailOptions.UseCurrentScale);

执行大约 30 秒,并返回 null。

这段代码

BitmapImage bitmapImage = new BitmapImage ();
var stream = await file.OpenAsync (FileAccessMode.Read);
if (stream! = null) bitmapImage.SetSource (stream);

但是,这是一张完整的图片,我需要一个缩略图。我试图通过更改图像大小来获得它。

public static async Task <InMemoryRandomAccessStream> Resize (StorageFile file, uint height, uint width)
{
    var fileStream = await file.OpenAsync (FileAccessMode.Read);
    BitmapDecoder decoder = await BitmapDecoder.CreateAsync (fileStream);
    InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream ();
    BitmapEncoder enc = await BitmapEncoder.CreateForTranscodingAsync (ras, decoder);
    enc.BitmapTransform.ScaledHeight = height;
    enc.BitmapTransform.ScaledWidth = width;
    await enc.FlushAsync ();
    ras.Seek (0);
    return ras;
}

那里

BitmapDecoder decoder = await BitmapDecoder.CreateAsync (fileStream);

代码 0x88982F61 出现异常“无法解码图像”。

FileOpenPicker 也不在 iPhone 上显示缩略图。但是 Metro 的标准照片应用程序可以毫无问题地显示 iPhone 上的所有照片。

这让我想到了两个问题:

  1. 有没有人有任何建议来解决这个问题?
  2. 也许,有没有从设备中检索所有缩略图的功能?
4

0 回答 0