Exemplo n.º 1
0
        /// <summary>
        /// Colorizing the Intensity Mask
        /// Create a color map that tells the GDI rendering method how it should draw the colors.
        /// What we're actually doing here is creating a table that specifies a new color for each shade of gray
        /// (all 256) of them. The easiest way to do this is to create a palette image that's
        /// 256 pixels wide by 1 pixel high.
        /// That means that we can directly map each pixel in the palette image to a shade of gray.
        /// </summary>
        /// <param name="mask">Gray shaded image to be colorized</param>
        /// <param name="alpha">0-255</param>
        /// <param name="type">ColorPaletteType (Photosounder, Rew or Sox)</param>
        /// <returns>a colorized bitmap</returns>
        public static Bitmap Colorize(Image mask, byte alpha, ColorPaletteType type)
        {
            // Create new bitmap to act as a work surface for the colorization process
            var output = new Bitmap(mask.Width, mask.Height, PixelFormat.Format32bppArgb);

            // Create a graphics object from our memory bitmap so we can draw on it and clear it's drawing surface
            Graphics surface = Graphics.FromImage(output);

            surface.Clear(Color.Transparent);

            // Build an array of color mappings to remap our greyscale mask to full color
            // Accept an alpha byte to specify the transparancy of the output image
            ColorMap[] colors = CreatePaletteIndex(alpha, type);

            // Create new image attributes class to handle the color remappings
            // Inject our color map array to instruct the image attributes class how to do the colorization
            var remapper = new ImageAttributes();

            remapper.SetRemapTable(colors);

            // Draw our mask onto our memory bitmap work surface using the new color mapping scheme
            surface.DrawImage(mask, new Rectangle(0, 0, mask.Width, mask.Height), 0, 0, mask.Width, mask.Height, GraphicsUnit.Pixel, remapper);

            // Send back newly colorized memory bitmap
            return(output);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Return a list of gradients based on the REW color palette
        /// </summary>
        /// <param name="steps">number of gradients (colors) to create</param>
        /// <param name="type">ColorPaletteType (Photosounder, Rew or Sox)</param>
        /// <returns>a list of gradients</returns>
        public static List <Color> GetHSLColorGradients(int steps, ColorPaletteType type)
        {
            var colors = new List <IColor>();

            switch (type)
            {
            case ColorPaletteType.REW:
                // create REW gradient
                colors.Add(HSLColor.FromRGB(Color.Red));
                colors.Add(HSLColor.FromRGB(Color.Yellow));
                colors.Add(HSLColor.FromRGB(Color.FromArgb(2, 178, 0)));                         // green
                colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 176, 178)));                       // light blue
                colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 0, 177)));                         // blue
                colors.Add(HSLColor.FromRGB(Color.FromArgb(61, 0, 124)));                        // purple
                break;

            case ColorPaletteType.SOX:
                // create SOX gradient
                colors.Add(HSLColor.FromRGB(Color.FromArgb(255, 255, 254)));                       // white
                colors.Add(HSLColor.FromRGB(Color.FromArgb(255, 235, 60)));
                colors.Add(HSLColor.FromRGB(Color.FromArgb(252, 86, 0)));
                colors.Add(HSLColor.FromRGB(Color.FromArgb(210, 0, 64)));
                colors.Add(HSLColor.FromRGB(Color.FromArgb(131, 0, 125)));
                colors.Add(HSLColor.FromRGB(Color.FromArgb(25, 0, 98)));
                colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 0, 0)));                       // black
                break;

            case ColorPaletteType.PHOTOSOUNDER:
                // create Photosounder gradient
                colors.Add(HSLColor.FromRGB(Color.FromArgb(255, 255, 254)));                     // white
                colors.Add(HSLColor.FromRGB(Color.FromArgb(249, 247, 78)));                      //
                colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 0, 100)));                         // blue
                break;

            case ColorPaletteType.MATLAB:
                // create Matlab / Octave gradient (jet(64))
                colors.Add(HSLColor.FromRGB(Color.FromArgb(127, 0, 0)));
                colors.Add(HSLColor.FromRGB(Color.FromArgb(255, 2, 0)));
                colors.Add(HSLColor.FromRGB(Color.FromArgb(255, 131, 0)));
                colors.Add(HSLColor.FromRGB(Color.FromArgb(249, 255, 6)));
                colors.Add(HSLColor.FromRGB(Color.FromArgb(119, 255, 135)));
                colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 244, 255)));
                colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 115, 255)));
                colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 0, 240)));
                colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 0, 127)));
                break;

            case ColorPaletteType.BLACK_AND_WHITE:
            default:
                // create black and white gradient
                colors.Add(HSLColor.FromRGB(Color.White));
                colors.Add(HSLColor.FromRGB(Color.Black));
                break;
            }
            List <Color> gradients = ColorUtils.HslLinearInterpolate(steps, colors);

            return(gradients);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Return a list of gradients based on the REW color palette
        /// </summary>
        /// <param name="steps">number of gradients (colors) to create</param>
        /// <param name="type">ColorPaletteType (Photosounder, Rew or Sox)</param>
        /// <returns>a list of gradients</returns>
        public static List <Color> GetRGBColorGradients(int steps, ColorPaletteType type)
        {
            var colors = new List <Color>();

            switch (type)
            {
            case ColorPaletteType.REW:
                // create REW gradient
                colors.Add(Color.Red);
                colors.Add(Color.Yellow);
                colors.Add(Color.FromArgb(2, 178, 0));                         // green
                colors.Add(Color.FromArgb(0, 176, 178));                       // light blue
                colors.Add(Color.FromArgb(0, 0, 177));                         // blue
                colors.Add(Color.FromArgb(61, 0, 124));                        // purple
                break;

            case ColorPaletteType.SOX:
                // create SOX gradient
                colors.Add(Color.FromArgb(255, 255, 254));                       // white
                colors.Add(Color.FromArgb(255, 235, 60));
                colors.Add(Color.FromArgb(252, 86, 0));
                colors.Add(Color.FromArgb(210, 0, 64));
                colors.Add(Color.FromArgb(131, 0, 125));
                colors.Add(Color.FromArgb(25, 0, 98));
                colors.Add(Color.FromArgb(0, 0, 0));                       // black
                break;

            case ColorPaletteType.PHOTOSOUNDER:
                // create Photosounder gradient
                colors.Add(Color.FromArgb(255, 255, 255));                       // white
                colors.Add(Color.FromArgb(255, 255, 112));                       // skin color
                colors.Add(Color.FromArgb(63, 120, 190));                        //
                colors.Add(Color.FromArgb(16, 70, 180));                         //
                colors.Add(Color.FromArgb(14, 55, 170));                         //
                colors.Add(Color.FromArgb(12, 30, 155));                         //
                colors.Add(Color.FromArgb(12, 30, 130));                         //
                colors.Add(Color.FromArgb(10, 22, 110));                         //
                colors.Add(Color.FromArgb(10, 21, 106));                         //
                colors.Add(Color.FromArgb(10, 21, 104));                         //
                colors.Add(Color.FromArgb(10, 21, 100));                         // dark blue
                break;

            case ColorPaletteType.BLACK_AND_WHITE:
            default:
                // create black and white gradient
                colors.Add(Color.White);
                colors.Add(Color.Black);
                break;
            }
            List <Color> gradients = ColorUtils.RgbLinearInterpolate(steps, colors);

            return(gradients);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Build an array of color mappings to remap our greyscale mask to full color
        /// Accept an alpha byte to specify the transparancy of the output image
        /// </summary>
        /// <param name="alpha">specify the transparancy of the output image</param>
        /// <param name="type">ColorPaletteType (Photosounder, Rew or Sox)</param>
        /// <returns>a ColorMap array</returns>
        private static ColorMap[] CreatePaletteIndex(byte alpha, ColorPaletteType type)
        {
            ColorMap[] outputMap = new ColorMap[256];

            // Change this path to wherever you saved the palette image.
            //Bitmap palette = (Bitmap)Bitmap.FromFile(@"C:\Users\Dylan\Documents\Visual Studio 2005\Projects\HeatMapTest\palette.bmp");

            List <Color> gradients;

            switch (type)
            {
            case ColorPaletteType.PHOTOSOUNDER:
                gradients = ColorUtils.GetRGBColorGradients(256, ColorUtils.ColorPaletteType.PHOTOSOUNDER);
                break;

            case ColorPaletteType.REW:
                gradients = ColorUtils.GetHSBColorGradients(256, ColorUtils.ColorPaletteType.REW);
                break;

            case ColorPaletteType.SOX:
                gradients = ColorUtils.GetHSBColorGradients(256, ColorUtils.ColorPaletteType.SOX);
                break;

            case ColorPaletteType.MATLAB:
                gradients = ColorUtils.GetHSBColorGradients(256, ColorUtils.ColorPaletteType.MATLAB);
                break;

            default:
                gradients = ColorUtils.GetHSBColorGradients(256, ColorUtils.ColorPaletteType.SOX);
                break;
            }

            Bitmap palette = GetColorGradientsPalette(gradients, 1);

            // Loop through each pixel and create a new color mapping
            for (int x = 0; x <= 255; x++)
            {
                outputMap[x]          = new ColorMap();
                outputMap[x].OldColor = Color.FromArgb(x, x, x);
                outputMap[x].NewColor = Color.FromArgb(alpha, palette.GetPixel(255 - x, 0));
            }
            return(outputMap);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Build an array of color mappings to remap our greyscale mask to full color
        /// Accept an alpha byte to specify the transparancy of the output image
        /// </summary>
        /// <param name="alpha">specify the transparancy of the output image</param>
        /// <param name="type">ColorPaletteType (Photosounder, Rew or Sox)</param>
        /// <returns>a ColorMap array</returns>
        private static ColorMap[] CreatePaletteIndex(byte alpha, ColorPaletteType type)
        {
            var outputMap = new ColorMap[256];

            List <Color> gradients;

            switch (type)
            {
            case ColorPaletteType.PHOTOSOUNDER:
                gradients = ColorUtils.GetRGBColorGradients(256, ColorUtils.ColorPaletteType.PHOTOSOUNDER);
                break;

            case ColorPaletteType.REW:
                gradients = ColorUtils.GetHSBColorGradients(256, ColorUtils.ColorPaletteType.REW);
                break;

            case ColorPaletteType.SOX:
                gradients = ColorUtils.GetHSBColorGradients(256, ColorUtils.ColorPaletteType.SOX);
                break;

            case ColorPaletteType.MATLAB:
                gradients = ColorUtils.GetHSBColorGradients(256, ColorUtils.ColorPaletteType.MATLAB);
                break;

            default:
                gradients = ColorUtils.GetHSBColorGradients(256, ColorUtils.ColorPaletteType.SOX);
                break;
            }

            Bitmap palette = GetColorGradientsPalette(gradients, 1);

            // Loop through each pixel and create a new color mapping
            for (int x = 0; x <= 255; x++)
            {
                outputMap[x]          = new ColorMap();
                outputMap[x].OldColor = Color.FromArgb(x, x, x);
                outputMap[x].NewColor = Color.FromArgb(alpha, palette.GetPixel(255 - x, 0));
            }
            return(outputMap);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Build an array of color mappings to remap our greyscale mask to full color
        /// Accept an alpha byte to specify the transparancy of the output image
        /// </summary>
        /// <param name="alpha">specify the transparancy of the output image</param>
        /// <param name="type">ColorPaletteType (Photosounder, Rew or Sox)</param>
        /// <returns>a ColorMap array</returns>
        private static ColorMap[] CreatePaletteIndex(byte alpha, ColorPaletteType type)
        {
            ColorMap[] outputMap = new ColorMap[256];

            // Change this path to wherever you saved the palette image.
            //Bitmap palette = (Bitmap)Bitmap.FromFile(@"C:\Users\Dylan\Documents\Visual Studio 2005\Projects\HeatMapTest\palette.bmp");

            List<Color> gradients;
            switch (type) {
                case ColorPaletteType.PHOTOSOUNDER:
                    gradients = ColorUtils.GetRGBColorGradients(256, ColorUtils.ColorPaletteType.PHOTOSOUNDER);
                    break;
                case ColorPaletteType.REW:
                    gradients = ColorUtils.GetHSBColorGradients(256, ColorUtils.ColorPaletteType.REW);
                    break;
                case ColorPaletteType.SOX:
                    gradients = ColorUtils.GetHSBColorGradients(256, ColorUtils.ColorPaletteType.SOX);
                    break;
                case ColorPaletteType.MATLAB:
                    gradients = ColorUtils.GetHSBColorGradients(256, ColorUtils.ColorPaletteType.MATLAB);
                    break;
                default:
                    gradients = ColorUtils.GetHSBColorGradients(256, ColorUtils.ColorPaletteType.SOX);
                    break;
            }

            Bitmap palette = GetColorGradientsPalette(gradients, 1);

            // Loop through each pixel and create a new color mapping
            for (int x = 0; x <= 255; x++)
            {
                outputMap[x] = new ColorMap();
                outputMap[x].OldColor = Color.FromArgb(x, x, x);
                outputMap[x].NewColor = Color.FromArgb(alpha, palette.GetPixel(255-x, 0));
            }
            return outputMap;
        }
Exemplo n.º 7
0
        /// <summary>
        /// Return a list of gradients based on the REW color palette
        /// </summary>
        /// <param name="steps">number of gradients (colors) to create</param>
        /// <returns>a list of gradients</returns>
        public static List<Color> GetRGBColorGradients(int steps, ColorPaletteType type)
        {
            List<Color> colors = new List<Color>();

            switch (type) {
                case ColorPaletteType.REW:
                    // create REW gradient
                    colors.Add(Color.Red);
                    colors.Add(Color.Yellow);
                    colors.Add(Color.FromArgb(2, 178, 0)); // green
                    colors.Add(Color.FromArgb(0, 176, 178)); // light blue
                    colors.Add(Color.FromArgb(0, 0, 177)); // blue
                    colors.Add(Color.FromArgb(61, 0, 124)); // purple
                    break;
                case ColorPaletteType.SOX:
                    // create SOX gradient
                    colors.Add(Color.FromArgb(255,255,254)); // white
                    colors.Add(Color.FromArgb(255,235,60));
                    colors.Add(Color.FromArgb(252,86,0));
                    colors.Add(Color.FromArgb(210,0,64));
                    colors.Add(Color.FromArgb(131,0,125));
                    colors.Add(Color.FromArgb(25,0,98));
                    colors.Add(Color.FromArgb(0,0,0)); // black
                    break;
                case ColorPaletteType.PHOTOSOUNDER:
                    // create Photosounder gradient
                    colors.Add(Color.FromArgb(255, 255, 255)); // white
                    colors.Add(Color.FromArgb(255, 255, 112)); // skin color
                    colors.Add(Color.FromArgb(63, 120, 190)); //
                    colors.Add(Color.FromArgb(16, 70, 180)); //
                    colors.Add(Color.FromArgb(14, 55, 170)); //
                    colors.Add(Color.FromArgb(12, 30, 155)); //
                    colors.Add(Color.FromArgb(12, 30, 130)); //
                    colors.Add(Color.FromArgb(10, 22, 110)); //
                    colors.Add(Color.FromArgb(10, 21, 106)); //
                    colors.Add(Color.FromArgb(10, 21, 104)); //
                    colors.Add(Color.FromArgb(10, 21, 100)); // dark blue
                    break;
                case ColorPaletteType.BLACK_AND_WHITE:
                default:
                    // create black and white gradient
                    colors.Add(Color.White);
                    colors.Add(Color.Black);
                    break;
            }
            List<Color> gradients = ColorUtils.RgbLinearInterpolate(steps, colors);
            return gradients;
        }
Exemplo n.º 8
0
        /// <summary>
        /// Return a list of gradients based on the REW color palette
        /// </summary>
        /// <param name="steps">number of gradients (colors) to create</param>
        /// <returns>a list of gradients</returns>
        public static List<Color> GetHSLColorGradients(int steps, ColorPaletteType type)
        {
            List<IColor> colors = new List<IColor>();

            switch (type) {
                case ColorPaletteType.REW:
                    // create REW gradient
                    colors.Add(HSLColor.FromRGB(Color.Red));
                    colors.Add(HSLColor.FromRGB(Color.Yellow));
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(2, 178, 0))); // green
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 176, 178))); // light blue
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 0, 177))); // blue
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(61, 0, 124))); // purple
                    break;
                case ColorPaletteType.SOX:
                    // create SOX gradient
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(255,255,254))); // white
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(255,235,60)));
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(252,86,0)));
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(210,0,64)));
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(131,0,125)));
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(25,0,98)));
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(0,0,0))); // black
                    break;
                case ColorPaletteType.PHOTOSOUNDER:
                    // create Photosounder gradient
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(255, 255, 254))); // white
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(249, 247, 78))); //
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 0, 100))); // blue
                    break;
                case ColorPaletteType.MATLAB:
                    // create Matlab / Octave gradient (jet(64))
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(127, 0, 0)));
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(255, 2, 0)));
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(255, 131, 0)));
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(249, 255, 6)));
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(119, 255, 135)));
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 244, 255)));
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 115, 255)));
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 0, 240)));
                    colors.Add(HSLColor.FromRGB(Color.FromArgb(0, 0, 127)));
                    break;
                case ColorPaletteType.BLACK_AND_WHITE:
                default:
                    // create black and white gradient
                    colors.Add(HSLColor.FromRGB(Color.White));
                    colors.Add(HSLColor.FromRGB(Color.Black));
                    break;
            }
            List<Color> gradients = ColorUtils.HslLinearInterpolate(steps, colors);
            return gradients;
        }
Exemplo n.º 9
0
        /// <summary>
        /// Colorizing the Intensity Mask
        /// Create a color map that tells the GDI rendering method how it should draw the colors.
        /// What we're actually doing here is creating a table that specifies a new color for each shade of gray
        /// (all 256) of them. The easiest way to do this is to create a palette image that's
        /// 256 pixels wide by 1 pixel high.
        /// That means that we can directly map each pixel in the palette image to a shade of gray.
        /// </summary>
        /// <param name="mask">Gray shaded image to be colorized</param>
        /// <param name="alpha">0-255</param>
        /// <returns>a colorized bitmap</returns>
        public static Bitmap Colorize(Image mask, byte alpha, ColorPaletteType type)
        {
            // Create new bitmap to act as a work surface for the colorization process
            Bitmap output = new Bitmap(mask.Width, mask.Height, PixelFormat.Format32bppArgb);

            // Create a graphics object from our memory bitmap so we can draw on it and clear it's drawing surface
            Graphics surface = Graphics.FromImage(output);
            surface.Clear(Color.Transparent);

            // Build an array of color mappings to remap our greyscale mask to full color
            // Accept an alpha byte to specify the transparancy of the output image
            ColorMap[] colors = CreatePaletteIndex(alpha, type);

            // Create new image attributes class to handle the color remappings
            // Inject our color map array to instruct the image attributes class how to do the colorization
            ImageAttributes remapper = new ImageAttributes();
            remapper.SetRemapTable(colors);

            // Draw our mask onto our memory bitmap work surface using the new color mapping scheme
            surface.DrawImage(mask, new Rectangle(0, 0, mask.Width, mask.Height), 0, 0, mask.Width, mask.Height, GraphicsUnit.Pixel, remapper);

            // Send back newly colorized memory bitmap
            return output;
        }
Exemplo n.º 10
0
 private void ColorPaletteTypeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     colorPaletteType = (ColorPaletteType)ColorPaletteTypeComboBox.SelectedItem;
     Refresh();
 }