예제 #1
0
        // Drawing against a transparent black background blends
        // the 'alpha' pixels against black, leaving a black outline.
        // Interpolate between black and white
        // based on it's intensity to covert this 'outline' to
        // it's grayscale equivalent.
        public static void ConvertToGrey(Bitmap bitmap)
        {
            var transBlack = Color.Transparent;

            using (var bitmapData = new PixelAccessor(bitmap, ImageLockMode.ReadWrite))
            {
                for (int y = 0; y < bitmap.Height; y++)
                {
                    for (int x = 0; x < bitmap.Width; x++)
                    {
                        System.Drawing.Color color = bitmapData[x, y];

                        if (color.ColorsEqual(transBlack))
                        {
                            continue;
                        }

                        var alpha = color.A / (255.0f);
                        var col   = Color.Lerp(Color.Transparent, Color.White, alpha);
                        color             = System.Drawing.Color.FromArgb(color.A, col.R, col.G, col.B);
                        bitmapData [x, y] = color;
                    }
                }
            }
        }