重写LockBits代码没有不安全

时间:2013-06-29 14:15:01

标签: c# unmanaged

如何在没有不安全修饰符的情况下重写此代码?

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));

1 个答案:

答案 0 :(得分:2)

要获得对位图数据的透明高效访问(比使用LockBits的任何复制技术更快),您可以使用以下技术,不需要将代码标记为不安全(但它确实需要FullTrust):

重要事项:尽量避免长时间固定对象(阻碍GC效率),不要忘记在finally子句中处理位图和GC句柄!

如果您需要信息流,当然也可以create a normal MemoryStream on this byte[]