在C ++ / CLI中从本机缓冲区创建和显示RGBA映像

时间:2013-11-11 13:17:54

标签: c# bitmap c++-cli rgba bitmapsource

我有一个包含RGBA图像的原生char *缓冲区。问题似乎是它是一种真正的RGBA格式,而不是Windows风格的ARGB。 (代表BGRA,向后)

必须从缓冲区创建对象而不复制它。

到目前为止,我正在使用从缓冲区创建的BitmapSource,使用:
 的 BitmapSource::Create Method (Int32, Int32, Double, Double, PixelFormat, BitmapPalette, IntPtr, Int32, Int32)
我尝试过 System::Drawing::Bitmap ,但遗憾的是它似乎只支持窗口的ARGB格式,而不是“正常”的RGBA格式。

现在我想要一个DeleteObject(BitmapSource ^ )函数来释放它正在使用的缓冲区。它应该在对象使用后调用 使用Bitmap非常简单:

void DeleteObject(Bitmap^ bmp)
{
    if (bmp == nullptr) 
    {
        return;
    }
    Rectangle rect(0, 0, bmp->Width, bmp->Height);
    System::Drawing::Imaging::BitmapData^ bmpData =
        bmp->LockBits(rect, System::Drawing::Imaging::ImageLockMode::ReadWrite,
        bmp->PixelFormat);

    delete [] (char*) bmpData->Scan0->ToPointer();

    bmp->UnlockBits(bmpData);
    bmp->~Bitmap();
}

我想用BitmapSource(或任何其他可能使用RGBA的东西)做类似的事情。

如何安全地释放BitmapSource缓冲区?
如何获得BitmapSource的基础缓冲区?

我不介意使用任何其他可以使用和显示RGBA缓冲区的C#对象(真正的RGBA,而不是Windows风格的ARGB)。

0 个答案:

没有答案