2016-12-08 64 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));