2016-12-08 31 views
0

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

CanvasDrawingSession.DrawImage() 

,我有想象,需要一种方式来获得的位图像素。

+0

你的* BitmapSource *从哪里来? – Romasz

+0

摔跤库。 https://github.com/paulcbetts/splat - 让事情变得艰难的根本问题是我正在开发多个平台。但是,我最终认定这已经很麻烦,所以最好在Windows的情况下完全绕过BitmapSource。 –

+0

我问,因此使用* SoftwareBitmap *而不是* BitmapSource *会更容易。因此,它可以直接从它创建* CanvasImage *。 – Romasz

回答

1

您无法从Windows.UI.Xaml.Media.Imaging获取像素。直接使用BitmapImage。但是您可以使用WriteableBitmap而不是BitmapImage。然后,您可以通过其PixelBuffer属性获取像素数据。

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

1

除了使用PixelBuffer,如上described by Xavier Xie,你可以使用SoftwareBitmap来创建ICanvasImage。如果你有一个流,那么你可以这样做:

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