如何在没有不安全修饰符的情况下重写此代码?
var bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, bitmap.PixelFormat);
var size = Math.Abs(bmpData.Stride) * bitmap.Height;
var stream = new UnmanagedMemoryStream((byte*)bmpData.Scan0, size));
答案 0 :(得分:2)
要获得对位图数据的透明高效访问(比使用LockBits的任何复制技术更快),您可以使用以下技术,不需要将代码标记为不安全(但它确实需要FullTrust):
byte[]
GCHandle.Alloc()
电话Marshal.UnsafeAddrOfPinnedArrayElement()
byte[]
的实际地址
Bitmap
和byte[]
重要事项:尽量避免长时间固定对象(阻碍GC效率),不要忘记在finally子句中处理位图和GC句柄!
如果您需要信息流,当然也可以create a normal MemoryStream
on this byte[]
。