private void ChangeContrast(breinImage image) { byte[] precalc = new byte[256]; // Precalculate all changes for(int i = 0;i < 256;i++) { double val = i / 255.0; val -= 0.5; val *= _contrast; val += 0.5; val = (int)Math.Round(val * 255); if(val < 0) { val = 0; } else if(val > 255) { val = 255; } precalc[i] = (byte)val; } byte[] b = image.ByteArray; for(int i = 0, l = b.Length;i < l;i += 4) { b[i] = precalc[b[i]]; // b b[i + 1] = precalc[b[i + 1]]; // g b[i + 2] = precalc[b[i + 2]]; // r } image.ByteArray = b; }
private void ChangeContrast(breinImage image) { byte[] precalc = new byte[256]; // Precalculate all changes for (int i = 0; i < 256; i++) { double val = i / 255.0; val -= 0.5; val *= _contrast; val += 0.5; val = (int)Math.Round(val * 255); if (val < 0) { val = 0; } else if (val > 255) { val = 255; } precalc[i] = (byte)val; } byte[] b = image.ByteArray; for (int i = 0, l = b.Length; i < l; i += 4) { b[i] = precalc[b[i]]; // b b[i + 1] = precalc[b[i + 1]]; // g b[i + 2] = precalc[b[i + 2]]; // r } image.ByteArray = b; }
public void Run(breinImage image) { byte[] b = image.ByteArray; byte[] dest = new byte[b.Length]; GaussianBlur(image.Width, image.Height, _radius, _amount, ref b, ref dest); image.ByteArray = dest; }
private static void Sharpen(breinImage image, double amount, double radius) { byte[] src = image.ByteArray; byte[] dest = new byte[src.Length]; GaussianBlurFilter.GaussianBlur(image.Width, image.Height, radius, amount, ref src, ref dest); int i = 0; int r, g, b; for (int x = 0, l = image.Width; x < l; x++) { for (int y = 0, k = image.Height; y < k; y++) { // Apply difference of gaussian blur filter b = src[i] + (int)((src[i] - dest[i]) * amount); g = src[i + 1] + (int)((src[i + 1] - dest[i + 1]) * amount); r = src[i + 2] + (int)((src[i + 2] - dest[i + 2]) * amount); // Keep inside range 0 to 255 if (r < 0) { r = 0; } else if (r > 255) { r = 255; } if (g < 0) { g = 0; } else if (g > 255) { g = 255; } if (b < 0) { b = 0; } else if (b > 255) { b = 255; } // Write back final bytes dest[i] = (byte)b; dest[i + 1] = (byte)g; dest[i + 2] = (byte)r; i += 4; } } image.ByteArray = dest; }
private static void DesaturateImage(breinImage image) { byte[] b = image.ByteArray; for(int i = 0, l = b.Length;i < l;i += 4) { b[i] = b[i + 1] = b[i + 2] = (byte)(.299 * b[i + 2] + .587 * b[i + 1] + .114 * b[i]); } image.ByteArray = b; }
private static void DesaturateImage(breinImage image) { byte[] b = image.ByteArray; for (int i = 0, l = b.Length; i < l; i += 4) { b[i] = b[i + 1] = b[i + 2] = (byte)(.299 * b[i + 2] + .587 * b[i + 1] + .114 * b[i]); } image.ByteArray = b; }
private void ChangeBrightness(breinImage image) { byte[] b = image.ByteArray; for(int i = 0, l = b.Length;i < l;i += 4) { b[i] = _precalcTable[b[i]]; // b b[i + 1] = _precalcTable[b[i + 1]]; // g b[i + 2] = _precalcTable[b[i + 2]]; // r } image.ByteArray = b; }
private static void InvertImage(breinImage image) { byte[] b = image.ByteArray; for(int i = 0, l = b.Length;i < l;i += 4) { b[i] = (byte)(255 - b[i]); // b b[i + 1] = (byte)(255 - b[i + 1]); // g b[i + 2] = (byte)(255 - b[i + 2]); // r } image.ByteArray = b; }
private void ChangeBrightness(breinImage image) { byte[] b = image.ByteArray; for (int i = 0, l = b.Length; i < l; i += 4) { b[i] = _precalcTable[b[i]]; // b b[i + 1] = _precalcTable[b[i + 1]]; // g b[i + 2] = _precalcTable[b[i + 2]]; // r } image.ByteArray = b; }
private static void InvertImage(breinImage image) { byte[] b = image.ByteArray; for (int i = 0, l = b.Length; i < l; i += 4) { b[i] = (byte)(255 - b[i]); // b b[i + 1] = (byte)(255 - b[i + 1]); // g b[i + 2] = (byte)(255 - b[i + 2]); // r } image.ByteArray = b; }
private static void Sharpen(breinImage image, double amount, double radius) { byte[] src = image.ByteArray; byte[] dest = new byte[src.Length]; GaussianBlurFilter.GaussianBlur(image.Width, image.Height, radius, amount, ref src, ref dest); int i = 0; int r, g, b; for(int x = 0, l = image.Width;x < l;x++) { for(int y = 0, k = image.Height;y < k;y++) { // Apply difference of gaussian blur filter b = src[i] + (int)((src[i] - dest[i]) * amount); g = src[i + 1] + (int)((src[i + 1] - dest[i + 1]) * amount); r = src[i + 2] + (int)((src[i + 2] - dest[i + 2]) * amount); // Keep inside range 0 to 255 if(r < 0) r = 0; else if(r > 255) r = 255; if(g < 0) g = 0; else if(g > 255) g = 255; if(b < 0) b = 0; else if(b > 255) b = 255; // Write back final bytes dest[i] = (byte)b; dest[i + 1] = (byte)g; dest[i + 2] = (byte)r; i += 4; } } image.ByteArray = dest; }
public void Run(breinImage image) { Sharpen(image, _amount, _radius); }
public void Run(breinImage image) { PrecalculateTable(); ChangeBrightness(image); }
public void Run(breinImage image) { InvertImage(image); }
public void Run(breinImage image) { DesaturateImage(image); }
public void Run(breinImage image) { ChangeContrast(image); }