我想知道是否发送锁定的Bitmap的BitmapData。Scan0字段到非托管 C++ 可能是一个问题。这是我的做法:
来自 C#.NET:
public class BmpTest{
Bitmap bmp = new Bitmap();
BitmapData bmpData = new BitmapData();
public BmpTest()
{
fooFillBitmapWithData(bmp);
}
public IntPtr getDataPtr()
{
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
bmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly, bmp.PixelFormat);
return bmpData.Scan0;
}
public void unlockData()
{
bmp.UnlockBits(bmpData);
}
}
然后,使用 C++/CLI Wrapper(未包含在此示例中):
// This is unmanaged, native c++
int main()
{
unsigned short * dataPtr = BmpTestCliWrapper.getDataPtr();
// do something like ... update openGL texture with data
BmpTestCliWrapper.unlockData();
}
我没有使用 GCHandle,因为 BitmapData 将根据此源锁定到内存。我只需要读取位图,就可以更新 OpenGL 纹理。我无法直接从 C++ 访问图像。我可能可以使用 C++/CLI,但我没有看到明显的优势。