如何将RGB像素缓冲区转换为IRandomAccessStream ^

时间:2017-08-13 09:47:07

标签: c++ stream uwp type-conversion c++-cx

我的结构如下:

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

我想将其转换为 IRandomAccessStream ^ 我该怎么做? (缓冲区指向的字节)

我不确定PixelFormat是否有所不同,如果有好的,但我们可以说它是 RGB 格式。

谢谢!

注意

我需要 SoftwareBitmap ^ 所以我的想法是获取IRandomAccessStream ^然后获取BitmapDecoder ^我将获得SoftwareBitmap ^如果有一些我不知道的快捷方式会很棒!

1 个答案:

答案 0 :(得分:0)

如果您需要SoftwareBitmap ^,则无需通过Stream,您可以直接从缓冲区获取它

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

相关问题