为什么我使用SetBitmapAsync()得到这样的错误?

时间:2016-04-26 13:11:53

标签: c# image image-processing win-universal-app

我是UWP应用程序开发的新手,并尝试构建一个图像处理应用程序。我正在使用https://msdn.microsoft.com/en-us/windows/uwp/audio-video-camera/imaging中的代码但是我得到了这样的异常: SoftwareBitmapSource :: SetBitmapAsync仅支持具有正宽度/高度,bgra8像素格式和预乘或无alpha 的SoftwareBitmap。在代码await source.SetBitmapAsync(sbitmap);中,我想知道这种方法是否真的有这么多限制,如果有的话,我应该使用它的限制最少。代码段如下

FileOpenPicker fileOpenPicker = new FileOpenPicker();
fileOpenPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
fileOpenPicker.FileTypeFilter.Add(".jpg");
fileOpenPicker.ViewMode = PickerViewMode.Thumbnail;

var inputFile = await fileOpenPicker.PickSingleFileAsync();
if(inputFile != null)
{
    SoftwareBitmap sbitmap;
    using (IRandomAccessStream stream = await inputFile.OpenAsync(FileAccessMode.Read))
    {
        BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
        sbitmap = await decoder.GetSoftwareBitmapAsync();
    }
    var source = new SoftwareBitmapSource();
    await source.SetBitmapAsync(sbitmap);
    **Exception--->**imageControl.Source = source;
}

1 个答案:

答案 0 :(得分:6)

这是一个已知问题。现在你可以通过使用SoftwareBitmap.Convert来解决这个问题,以获得一个Bgra8预乘的SoftwareBitmap来显示

SoftwareBitmap displayableImage = SoftwareBitmap.Convert(sbitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);