我在 .NET 中并使用指针来访问原始图像数据。目前,我正在使用以下方法存储对位图 Scan0(和 Stride)的引用:
BitmapData bmpData = bmp.LockBits(...);
*byte scan0 = (*byte)bmpData.Scan0;
有时我的程序会随机崩溃,并出现“尝试访问受保护的内存”之类的错误。我假设这是因为在 .NET GC 例行压缩内存后我的指针变得无效。因此,如果我使用IntPtr
而不是*byte
我当前使用的指针,那么指针在内存压缩后是否仍然有效?
BitmapData bmpData = bmp.LockBits(...);
IntPtr scan0 = bmpData.Scan0;
显然,几乎不可能对此进行测试,因为我无法复制我得到的“随机”内存错误,所以我试图找到一个理论上正确的解决方案,并希望它能纠正我的问题。
编辑:请不要开始讨论位图操作技术。我只是想知道是否IntPtr
比*byte
.