如何将 RGB 像素缓冲区转换为 IRandomAccessStream^
How to convert RGB Pixel Buffer to IRandomAccessStream^
我有这样的结构:
struct PixelBuffer
{
unsigned int width,height,stride;
PixelFormat format;
unsigned char * buffer;
}
我想将其转换为 IRandomAccessStream^ 我该怎么做? (缓冲区指向的字节数)
我不确定 PixelFormat 是否有所不同,是否有有利的,但假设它是 RGB 格式。
谢谢!
备注
我需要 SoftwareBitmap^ 所以我的想法是获取 IRandomAccessStream^,然后获取 BitmapDecoder^,如果有一些我不知道的快捷方式,我将从中获取 SoftwareBitmap^那太好了!
如果你需要SoftwareBitmap^就不需要通过Stream了,直接从buffer中获取就可以了
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
我有这样的结构:
struct PixelBuffer
{
unsigned int width,height,stride;
PixelFormat format;
unsigned char * buffer;
}
我想将其转换为 IRandomAccessStream^ 我该怎么做? (缓冲区指向的字节数)
我不确定 PixelFormat 是否有所不同,是否有有利的,但假设它是 RGB 格式。
谢谢!
备注
我需要 SoftwareBitmap^ 所以我的想法是获取 IRandomAccessStream^,然后获取 BitmapDecoder^,如果有一些我不知道的快捷方式,我将从中获取 SoftwareBitmap^那太好了!
如果你需要SoftwareBitmap^就不需要通过Stream了,直接从buffer中获取就可以了
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