GCHandle.Alloc是一种更通用的方法,允许您为任何托管对象分配句柄并将其固定在内存中(或不固定).固定内存会阻止GC移动它,这在您必须将某些数据(例如数组)传递给非托管代码时尤其有用.
GCHandle.Alloc 无法以任何方式帮助您访问位图的数据,因为固定此对象只会阻止托管对象移动(Bitmap对象)(并进行垃圾回收).
然而,Bitmap是本机GDI + BITMAP结构的包装器.它不会将数据保存在您必须固定的任何托管数组中,它只是管理了GDI +位图对象的本机句柄.因为这Bitmap.LockBits是一种告诉这个位图的方式,你有兴趣访问它的内存,它只是一个GdipBitmapLockBits函数包装器.所以你需要调用它更多地与你使用GDI +位图的事实有关,而不是你在使用GC的托管环境中工作的事实.
一旦你使用了,LockBits你应该能够使用指针访问它的内存BitmapData.Scan0- 它是数据的第一个字节的地址.你不应该长时间遇到问题,因为你不能访问后面的内存BitmapData.Scan0 + Height * Stride.
UnlockBits当你完成时,请记住.
| 归档时间: |
|
| 查看次数: |
1520 次 |
| 最近记录: |