public static void WriteAsSpanBitmap(GDIBITMAP bmp, SpanBitmap.Action1 action) { var rect = new Rectangle(0, 0, bmp.Width, bmp.Height); GDIPTR dstBits = null; try { dstBits = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat); action(dstBits.AsSpanBitmapDangerous()); } finally { if (dstBits != null) { bmp.UnlockBits(dstBits); } } }
public static MemoryBitmap CloneAsMemoryBitmap(GDIBITMAP bmp, INTEROPFMT?fmtOverride = null) { var rect = new Rectangle(0, 0, bmp.Width, bmp.Height); GDIPTR bits = null; try { bits = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat); var span = bits.AsSpanBitmapDangerous(); return(fmtOverride.HasValue ? span.ToMemoryBitmap(fmtOverride.Value) : span.ToMemoryBitmap()); } finally { if (bits != null) { bmp.UnlockBits(bits); } } }