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

How to convert RGB Pixel Buffer to IRandomAccessStream^

本文关键字:转换 IRandomAccessStream 缓冲区 像素 RGB      更新时间:2023-10-16

我有这样的结构:

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

我想把它转换成IRandomAccessStream^,我该怎么做?(缓冲区指向的字节(

我不确定PixelFormat是否有区别以及是否有有利的格式,但假设它是RGB格式。

谢谢!

注意

我需要SoftwareBitmap^所以我的想法是获取IRandomAccessStream^,然后获取BitmapDecoder^,如果有一些我不知道的快捷方式,我会从中获得SoftwareBitmap^,那就太好了!

如果你需要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