我有一个包含 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# 对象。