public GreenWrapperFilter() : base() { Name = "Green"; ShortDescription = "Green"; _stampFilter = new StampFilter(3, 0.3); _colorSwapFilter = new ColorSwapFilter(Windows.UI.Color.FromArgb(255, 255, 255, 255), Windows.UI.Color.FromArgb(255, 0, 255, 0), 0.1, false, false); }
public static Bitmap SwapRGB(Bitmap bitmap, ColorSwapFilter swapFilterData) { BitmapData sourceData = bitmap.LockBits (new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); byte[] resultBuffer = new byte[sourceData.Stride * sourceData.Height]; Marshal.Copy(sourceData.Scan0, resultBuffer, 0, resultBuffer.Length); bitmap.UnlockBits(sourceData); byte sourceBlue = 0, resultBlue = 0, sourceGreen = 0, resultGreen = 0, sourceRed = 0, resultRed = 0, sourceAlpha = 0, resultAlpha = 0; byte byte2 = 2, maxValue = 255; for (int k = 0; k < resultBuffer.Length; k += 4) { sourceRed = resultBuffer[k]; sourceGreen = resultBuffer[k + 1]; sourceBlue = resultBuffer[k + 2]; sourceAlpha = resultBuffer[k + 3]; switch (swapFilterData.SwapType) { case ColorSwapFilter.ColorSwapType.FixDDS: { resultBlue = sourceRed; resultRed = sourceBlue; break; } } switch (swapFilterData.CompRed) { case ColorSwapFilter.Red.Red: resultRed = sourceRed; break; case ColorSwapFilter.Red.Green: resultRed = sourceGreen; break; case ColorSwapFilter.Red.Blue: resultRed = sourceBlue; break; case ColorSwapFilter.Red.Alpha: resultRed = sourceAlpha; break; case ColorSwapFilter.Red.One: resultRed = 255; break; case ColorSwapFilter.Red.Zero: resultRed = 0; break; } switch (swapFilterData.CompGreen) { case ColorSwapFilter.Green.Red: resultGreen = sourceRed; break; case ColorSwapFilter.Green.Green: resultGreen = sourceGreen; break; case ColorSwapFilter.Green.Blue: resultGreen = sourceBlue; break; case ColorSwapFilter.Green.Alpha: resultGreen = sourceAlpha; break; case ColorSwapFilter.Green.One: resultGreen = 255; break; case ColorSwapFilter.Green.Zero: resultGreen = 0; break; } switch (swapFilterData.CompBlue) { case ColorSwapFilter.Blue.Red: resultBlue = sourceRed; break; case ColorSwapFilter.Blue.Green: resultBlue = sourceGreen; break; case ColorSwapFilter.Blue.Blue: resultBlue = sourceBlue; break; case ColorSwapFilter.Blue.Alpha: resultBlue = sourceAlpha; break; case ColorSwapFilter.Blue.One: resultBlue = 255; break; case ColorSwapFilter.Blue.Zero: resultBlue = 0; break; } switch (swapFilterData.CompAlpha) { case ColorSwapFilter.Alpha.Red: resultAlpha = sourceRed; break; case ColorSwapFilter.Alpha.Green: resultAlpha = sourceGreen; break; case ColorSwapFilter.Alpha.Blue: resultAlpha = sourceBlue; break; case ColorSwapFilter.Alpha.Alpha: resultAlpha = sourceAlpha; break; case ColorSwapFilter.Alpha.One: resultAlpha = 255; break; case ColorSwapFilter.Alpha.Zero: resultAlpha = 0; break; } resultBuffer[k] = resultRed; resultBuffer[k + 1] = resultGreen; resultBuffer[k + 2] = resultBlue; resultBuffer[k + 3] = resultAlpha; } Bitmap resultBitmap = new Bitmap(bitmap.Width, bitmap.Height, PixelFormat.Format32bppArgb); BitmapData resultData = resultBitmap.LockBits (new Rectangle(0, 0, resultBitmap.Width, resultBitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); Marshal.Copy(resultBuffer, 0, resultData.Scan0, resultBuffer.Length); resultBitmap.UnlockBits(resultData); bitmap.Dispose(); return(resultBitmap); }