public ExtendedBitmapData(Bitmap bitmap) { OriginalBitmap = bitmap; if (OriginalBitmap.PixelFormat == PixelFormat.Format1bppIndexed || OriginalBitmap.PixelFormat == PixelFormat.Format32bppArgb || OriginalBitmap.PixelFormat == PixelFormat.Format32bppPArgb || OriginalBitmap.PixelFormat == PixelFormat.Format32bppRgb) { ImageHelper.ConvertToPixelFormat(bitmap, out Bitmap result, PixelFormat.Format24bppRgb); OriginalBitmap = result; } CopyBitmap = OriginalBitmap.Clone(new Rectangle(0, 0, OriginalBitmap.Width, OriginalBitmap.Height), OriginalBitmap.PixelFormat); OriginalBitmapData = OriginalBitmap.LockBits(new Rectangle(0, 0, OriginalBitmap.Width, OriginalBitmap.Height), ImageLockMode.ReadWrite, OriginalBitmap.PixelFormat); BytesPerPixel = Image.GetPixelFormatSize(OriginalBitmapData.PixelFormat) / 8; HeightInPixels = OriginalBitmapData.Height; WidthInBytes = OriginalBitmapData.Width * BytesPerPixel; FirstPixelPtr = (byte *)OriginalBitmapData.Scan0; CopyBitmapData = CopyBitmap.LockBits(new Rectangle(0, 0, OriginalBitmap.Width, OriginalBitmap.Height), ImageLockMode.ReadWrite, OriginalBitmap.PixelFormat); FirstPixelPtrCopy = (byte *)CopyBitmapData.Scan0; }
public void Dispose() { OriginalBitmap.UnlockBits(OriginalBitmapData); CopyBitmap.UnlockBits(CopyBitmapData); }