来自 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));
有没有办法将 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,如上
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
CanvasDrawingSession.DrawImage(await decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Rgba16, BitmapAlphaMode.Premultiplied));