private void UnsafeShadesOfGray() { UnsafeBitmap bmp2 = new UnsafeBitmap((Bitmap)pictureBox1.Image.Clone()); int x, y, r, g, b; PixelData c; int f; bmp2.LockBitmap(); for (y = 0; y < bmp2.Bitmap.Height; ++y) { for (x = 0; x < bmp2.Bitmap.Width; ++x) { c = bmp2.GetPixel(x, y); r = c.R; g = c.G; b = c.B; f = (r + g + b) / 3; //c = Color.FromArgb(255-r,255-g,255-b); //инверсия //c = Color.FromArgb(f, f, f); // чб c.R = (byte)f; c.G = (byte)f; c.B = (byte)f; bmp2.SetPixel(x, y, c); } } bmp2.UnlockBitmap(); pictureBox2.Image = bmp2.Bitmap; }
private void FastConver() { Random rnd = new Random(); double[,] matrix = random(); /*{ * { 0.01, 0.02, 0.03, 0.04, 0.05 }, * {-0.75,0,0.2,1,-1 }, * { 0,0,-0.2,1,-1}, * { 0,-0.5,0.2,1,-1}, * { 0,0,-0.2,1,-1} * }; */ UnsafeBitmap bmp2 = new UnsafeBitmap((Bitmap)pictureBox1.Image.Clone()); int x, y; double r = 0, g = 0, b = 0; PixelData c = new PixelData(); swatch.Start(); bmp2.LockBitmap(); for (y = 2; y < bmp2.Bitmap.Height - 2; y++) { for (x = 2; x < bmp2.Bitmap.Width - 2; x++) { r = 0; g = 0; b = 0; for (int i = -2; i < 3; i++) { for (int j = -2; j < 3; j++) { c = bmp2.GetPixel(x + i, y + j); //r += c.R / 25; g += c.G / 25; b += c.B / 25; r += c.R * matrix[i + 2, j + 2]; g += c.G * matrix[i + 2, j + 2]; b += c.B * matrix[i + 2, j + 2]; } } r = r < 0 ? 0 : (r > 255) ? 255 : r; g = g < 0 ? 0 : (g > 255) ? 255 : g; b = b < 0 ? 0 : (b > 255) ? 255 : b; c.R = (byte)r; c.G = (byte)g; c.B = (byte)b; bmp2.SetPixel(x, y, c); } } bmp2.UnlockBitmap(); swatch.Stop(); pictureBox2.Image = bmp2.Bitmap; }