コード例 #1
0
        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;
        }
コード例 #2
0
 public void Dispose()
 {
     OriginalBitmap.UnlockBits(OriginalBitmapData);
     CopyBitmap.UnlockBits(CopyBitmapData);
 }