1

我想知道是否发送锁定的BitmapBitmapDataScan0字段到非托管 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,但我没有看到明显的优势。

4

0 回答 0