2017-08-13 45 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

相关问题