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