コード例 #1
0
        private unsafe System.Drawing.Bitmap InvertImage(System.Drawing.Bitmap invertImage)
        {
            if (invertImage == null)
            {
                return(null);
            }

            var image = (System.Drawing.Bitmap)invertImage.Clone();

            BitmapData imageData = image.LockBits(new System.Drawing.Rectangle(0, 0, image.Width, image.Height),
                                                  ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);

            int height = image.Height;
            int width  = image.Width;

            Parallel.For(
                0,
                height,
                y =>
            {
                uint *imageRow = (uint *)(imageData.Scan0 + (y * imageData.Stride));

                for (int x = 0; x < width; x++)
                {
                    // Check if the mask byte is set
                    imageRow[x] = InvertColor(imageRow[x]);
                }
            });

            image.UnlockBits(imageData);

            return(image);
        }
コード例 #2
0
        internal static unsafe System.Drawing.Bitmap InvertImage(System.Drawing.Bitmap sourceBitmap)
        {
            if (sourceBitmap == null)
            {
                return(null);
            }

            Bitmap invertedBitmap = Unsafe.As <System.Drawing.Bitmap>(sourceBitmap.Clone());

            BitmapData imageData = invertedBitmap.LockBits(new System.Drawing.Rectangle(0, 0, invertedBitmap.Width, invertedBitmap.Height),
                                                           ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);

            int height = invertedBitmap.Height;
            int width  = invertedBitmap.Width;

            for (int y = 0; y < height; y++)
            //Parallel.For(
            //    0,
            //    height,
            //    y =>
            {
                uint *imageRow = (uint *)(imageData.Scan0 + (y * imageData.Stride));

                for (int x = 0; x < width; x++)
                {
                    imageRow[x] = InvertColor(imageRow[x]);
                }
                //});
            }

            invertedBitmap.UnlockBits(imageData);

            return(invertedBitmap);
        }