2017-08-13 38 views
0

我有結構是這樣的:如何RGB像素緩衝區轉換爲IRandomAccessStream^

struct PixelBuffer 
{ 
    unsigned int width,height,stride; 
    PixelFormat format; 
    unsigned char * buffer; 
} 

我想將其轉換爲IRandomAccessStream^我該怎麼做呢? (緩衝區指向的字節數)

我不確定PixelFormat是否有差別,如果有好的一個,但我們假設它是RGB格式。

謝謝!

注意

我需要SoftwareBitmap^所以我的想法是讓IRandomAccessStream ^然後拿到BitmapDecoder ^我從中會得到SoftwareBitmap ^如果有一些快捷方式,我不知道那會太好了!

+0

您需要編寫一個從'IRandomAccessStream'派生的類並實現所有必需的方法。 – VTT

+0

這是唯一的方法嗎?它會和IRandomAccessStream一樣嗎?我該如何實現它與PixelBuffer一起工作,通過構造函數發送它?我很抱歉,如果這些問題是愚蠢的我只是從來沒有實現自定義IRandomAccessStream,我不知道它有多難 –

+0

我已經找到這篇文章https://canbilgin.wordpress.com/2012/06/06/how-to- convert-byte-array-to-irandomaccessstream /是否與C++類似? –

回答

-1

沒有必要去通過流IF SoftwareBitmap ^是你需要什麼,你可以直接從緩衝區得到它這樣

vector<unsigned char> bufferBGRA; // Convert your bytes to BGRA 
DataWriter ^writer = ref new DataWriter(); 
writer->WriteBytes(Platform::ArrayReference<BYTE>(
      bufferBGRA.data(), 
      width * height * 4)); // 4 channels (BGRA) 
IBuffer ^buff= writer->DetachBuffer(); 

// Create SoftwareBitmap from buff 
SoftwareBitmap^ softwareBitmap = ref new SoftwareBitmap(BitmapPixelFormat::Bgra8, width, height); 
softwareBitmap->CopyFromBuffer(buff); 

和是在這種情況下BGRA是有利的格式,因爲您需要將緩衝區轉換爲BitmapPixelFormat支持的格式,如BGRA

相關問題