public Bitmap GetBitmap(Pixel[,] pixelMap) { Bitmap bmp = new Bitmap(pixelMap.GetUpperBound(1) + 1, pixelMap.GetUpperBound(0) + 1); for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++) { for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++) { bmp.SetPixel(j, i, Color.FromArgb(pixelMap[i, j].R, pixelMap[i, j].G, pixelMap[i, j].B)); } } return(bmp); }
public Pixel[,] Negative(Pixel[,] pixelMap) { for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++) { for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++) { pixelMap[i, j].R = (byte)(255 - pixelMap[i, j].R); pixelMap[i, j].G = (byte)(255 - pixelMap[i, j].G); pixelMap[i, j].B = (byte)(255 - pixelMap[i, j].B); } } return(pixelMap); }
public Pixel[,] GammaCorrection(Pixel[,] pixelMap, float gamma) { for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++) { for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++) { pixelMap[i, j].R = (byte)(Math.Pow((float)pixelMap[i, j].R / 255, gamma) * 255); pixelMap[i, j].G = (byte)(Math.Pow((float)pixelMap[i, j].G / 255, gamma) * 255); pixelMap[i, j].B = (byte)(Math.Pow((float)pixelMap[i, j].B / 255, gamma) * 255); } } return(pixelMap); }
private static void Fill(Pixel[,] buffer, Pixel pixel) { var width = buffer.GetUpperBound(0); var height = buffer.GetUpperBound(1); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { buffer[x, y] = pixel; } } }
public Pixel[,] Sepia(Pixel[,] pixelMap, int depth) { for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++) { for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++) { var av = (pixelMap[i, j].R + pixelMap[i, j].G + pixelMap[i, j].B) / 3; pixelMap[i, j].R = (byte)(av + 2 * depth > 255 ? 255 : av + 2 * depth); pixelMap[i, j].G = (byte)(av + depth > 255 ? 255 : av + depth); pixelMap[i, j].B = (byte)av; } } return(pixelMap); }
public Pixel[,] Grey(Pixel[,] pixelMap) { for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++) { for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++) { var av = (pixelMap[i, j].R + pixelMap[i, j].G + pixelMap[i, j].B) / 3; pixelMap[i, j].R = (byte)av; pixelMap[i, j].G = (byte)av; pixelMap[i, j].B = (byte)av; } } return(pixelMap); }
public Pixel[,] IdealFilter(Pixel[,] pixelMap) { var max = GetMaxLevel(pixelMap); for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++) { for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++) { pixelMap[i, j].R = (byte)(pixelMap[i, j].R * 255 / max.R); pixelMap[i, j].G = (byte)(pixelMap[i, j].G * 255 / max.G); pixelMap[i, j].B = (byte)(pixelMap[i, j].B * 255 / max.B); } } return(pixelMap); }
//Автоконтраст public Pixel[,] AutoLevels(Pixel[,] pixelMap) { var max = GetMaxLevel(pixelMap); var min = GetMinLevel(pixelMap); for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++) { for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++) { pixelMap[i, j].R = (byte)((pixelMap[i, j].R - min.R) * (255 / (max.R - min.R))); pixelMap[i, j].G = (byte)((pixelMap[i, j].G - min.G) * (255 / (max.G - min.G))); pixelMap[i, j].B = (byte)((pixelMap[i, j].B - min.B) * (255 / (max.B - min.B))); } } return(pixelMap); }
public Pixel[,] GreyWorld(Pixel[,] pixelMap) { byte av = 0; var AvLevel = GetAverageLevel(pixelMap, out av); for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++) { for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++) { pixelMap[i, j].R = (byte)(pixelMap[i, j].R * av / AvLevel.R); pixelMap[i, j].G = (byte)(pixelMap[i, j].G * av / AvLevel.G); pixelMap[i, j].B = (byte)(pixelMap[i, j].B * av / AvLevel.B); } } return(pixelMap); }
public Pixel[,] Noise(Pixel[,] pixelMap, int depth) { long R, G, B; for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++) { for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++) { Random rnd = new Random(); var rand = Convert.ToInt32(Math.Floor((rnd.NextDouble() - 1) * depth)); R = pixelMap[i, j].R + rand; G = pixelMap[i, j].G + rand; B = pixelMap[i, j].B + rand; if (R > 255) { R = 255; } if (G > 255) { G = 255; } if (B > 255) { B = 255; } if (R < 0) { R = 0; } if (G < 0) { G = 0; } if (B < 0) { B = 0; } pixelMap[i, j].R = (byte)R; pixelMap[i, j].G = (byte)G; pixelMap[i, j].B = (byte)B; } } return(pixelMap); }
public Pixel GetAverageLevel(Pixel[,] pixelMap, out byte av) { long R = 0, G = 0, B = 0; for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++) { for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++) { R += pixelMap[i, j].R; G += pixelMap[i, j].G; B += pixelMap[i, j].B; } } R = R / pixelMap.Length; G = G / pixelMap.Length; B = B / pixelMap.Length; av = (byte)((R + G + B) / 3); return(new Pixel((byte)R, (byte)G, (byte)B)); }
public static bool CheckNeigbours(Pixel[,] pixels, int x, int y) { int width = pixels.GetUpperBound(0) + 1, height = pixels.Length / width; if (x < width && y < height && x >= 0 && y >= 0 && !IsWhiteColor(pixels[x, y].Color) && !pixels[x, y].IsChecked) { return(true); } return(false); }
public Pixel GetMinLevel(Pixel[,] pixelMap) { byte R = 255, G = 255, B = 255; for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++) { for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++) { if (pixelMap[i, j].R < R) { R = pixelMap[i, j].R; } if (pixelMap[i, j].G < G) { G = pixelMap[i, j].G; } if (pixelMap[i, j].B < B) { B = pixelMap[i, j].B; } } } return(new Pixel(R, G, B)); }
public Pixel GetMaxLevel(Pixel[,] pixelMap) { byte R = 0, G = 0, B = 0; for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++) { for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++) { if (pixelMap[i, j].R > R) { R = pixelMap[i, j].R; } if (pixelMap[i, j].G > G) { G = pixelMap[i, j].G; } if (pixelMap[i, j].B > B) { B = pixelMap[i, j].B; } } } return(new Pixel(R, G, B)); }
public Pixel[,] BoxFilter(Pixel[,] pixelMap, float[,] mask) { float denom = 0; float R = 0, G = 0, B = 0; var maskY = mask.GetUpperBound(0) + 1; var maskX = mask.GetUpperBound(1) + 1; for (int i = 0; i < maskY; i++) { for (int j = 0; j < maskX; j++) { denom += mask[i, j]; } } var sizeY = pixelMap.GetUpperBound(0) + 1; var sizeX = pixelMap.GetUpperBound(1) + 1; Pixel[,] newMap = new Pixel[sizeY, sizeX]; for (int i = 0; i < pixelMap.GetUpperBound(0) + 1; i++) { for (int j = 0; j < pixelMap.GetUpperBound(1) + 1; j++) { newMap[i, j] = pixelMap[i, j]; } } if (denom == 0) { denom = 1; } for (int i = maskY / 2; i < pixelMap.GetUpperBound(0) + 1 - maskY / 2; i++) { for (int j = maskX / 2; j < pixelMap.GetUpperBound(1) + 1 - maskX / 2; j++) { R = 0; G = 0; B = 0; for (int l = 0; l < maskY; l++) { for (int m = 0; m < maskX; m++) { R += pixelMap[i + l - maskY / 2, j + m - maskX / 2].R * mask[l, m]; G += pixelMap[i + l - maskY / 2, j + m - maskX / 2].G * mask[l, m]; B += pixelMap[i + l - maskY / 2, j + m - maskX / 2].B * mask[l, m]; } } R = R / denom; G = G / denom; B = B / denom; if (R > 255) { R = 255; } if (G > 255) { G = 255; } if (B > 255) { B = 255; } if (R < 0) { R = 0; } if (G < 0) { G = 0; } if (B < 0) { B = 0; } newMap[i, j] = new Pixel((byte)R, (byte)G, (byte)B); } } return(newMap); }