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

lit*_*hen 1 c# image image-processing win-universal-app

我是UWP应用程序开发的新手,并试图构建一个图像处理应用程序.我在https://msdn.microsoft.com/en-us/windows/uwp/audio-video-camera/imaging中使用了代码但是我得到了这样的异常: SoftwareBitmapSource :: SetBitmapAsync仅支持具有正宽度/高度的SoftwareBitmap ,bgra8像素格式和预乘或没有alpha.在代码中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;
}
Run Code Online (Sandbox Code Playgroud)

Tre*_*ron 7

这是一个已知的问题.现在,您可以使用SoftwareBitmap.Convert来解决此问题,以获取Bgra8预乘的SoftwareBitmap来显示

SoftwareBitmap displayableImage = SoftwareBitmap.Convert(sbitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);
Run Code Online (Sandbox Code Playgroud)