来自 BitmapSource 的 ICanvasBitmap

ICanvasBitmap from BitmapSource

有没有办法将 Windows.UI.Xaml.Media.Imaging.BitmapSource 对象转换为实现 Microsoft.Graphics.Canvas.ICanvasImage 的 class 的成员?接口本身仅包含两个矩形获取方法。但是,我认为这还不够,因为我的最终目标是调用

CanvasDrawingSession.DrawImage()

我想这需要一种获取位图像素的方法。

您无法从 Windows.UI.Xaml.Media.Imaging.BitmapImage directly. But you can use a WriteableBitmap instead of a BitmapImage. Then you can get pixel data via its PixelBuffer 属性.

获取像素

之后,您可以使用CanvasBitmap.CreateFromBytes()方法创建CanvasBitmap。然后使用这个 CanvasBitmap 对象作为参数调用 CanvasDrawingSession.DrawImage() 方法。

除了使用PixelBuffer,如上,您还可以使用SoftwareBitmap创建您的 ICanvasImage.如果你有一个流,那么你可以这样做:

BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
CanvasDrawingSession.DrawImage(await decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Rgba16, BitmapAlphaMode.Premultiplied));