Skip to main content
 首页 » 编程设计

c#之为什么我使用 SetBitmapAsync() 会出现这样的错误

2024年01月24日35me-sa

我是 UWP 应用开发的新手,正在尝试构建图像处理应用。我正在使用 https://msdn.microsoft.com/en-us/windows/uwp/audio-video-camera/imaging 中的代码但是我有这样的异常(exception): 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; 
} 

请您参考如下方法:

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

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