0

我有一个包含 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 ^ )函数来释放它正在使用的缓冲区。它应该在对象使用后调用。
使用位图非常简单:

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缓冲区?
如何获得 a 的底层缓冲区BitmapSource

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

4

0 回答 0