我有一个包含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)。