FromRGB() public static method

Convert from RGB to HSL color space.
public static FromRGB ( RGB rgb ) : HSL
rgb RGB Source color in RGB color space.
return HSL
Example #1
0
        private unsafe void ProcessImage(UnmanagedImage image)
        {
            this.CheckSourceFormat(image.PixelFormat);
            int width  = image.Width;
            int height = image.Height;

            this.pixels = this.pixelsWithoutBlack = 0;
            int[] numArray  = new int[0x100];
            int[] numArray2 = new int[0x100];
            int[] numArray3 = new int[0x100];
            int[] numArray4 = new int[0x100];
            RGB   rgb       = new RGB();
            HSL   hsl       = new HSL();
            int   num3      = (image.PixelFormat == PixelFormat.Format24bppRgb) ? 3 : 4;
            int   num4      = image.Stride - (width * num3);
            byte *numPtr    = (byte *)image.ImageData.ToPointer();

            for (int i = 0; i < height; i++)
            {
                int num6 = 0;
                while (num6 < width)
                {
                    rgb.Red   = numPtr[2];
                    rgb.Green = numPtr[1];
                    rgb.Blue  = numPtr[0];
                    HSL.FromRGB(rgb, hsl);
                    numArray[(int)(hsl.Saturation * 255.0)]++;
                    numArray2[(int)(hsl.Luminance * 255.0)]++;
                    this.pixels++;
                    if (hsl.Luminance != 0.0)
                    {
                        numArray3[(int)(hsl.Saturation * 255.0)]++;
                        numArray4[(int)(hsl.Luminance * 255.0)]++;
                        this.pixelsWithoutBlack++;
                    }
                    num6++;
                    numPtr += num3;
                }
                numPtr += num4;
            }
            this.saturation             = new ContinuousHistogram(numArray, new DoubleRange(0.0, 1.0));
            this.luminance              = new ContinuousHistogram(numArray2, new DoubleRange(0.0, 1.0));
            this.saturationWithoutBlack = new ContinuousHistogram(numArray3, new DoubleRange(0.0, 1.0));
            this.luminanceWithoutBlack  = new ContinuousHistogram(numArray4, new DoubleRange(0.0, 1.0));
        }
Example #2
0
        private unsafe void ProcessImage(UnmanagedImage image, byte *mask, int maskLineSize)
        {
            int width  = image.Width;
            int height = image.Height;

            pixels = (pixelsWithoutBlack = 0);
            int[] array  = new int[256];
            int[] array2 = new int[256];
            int[] array3 = new int[256];
            int[] array4 = new int[256];
            RGB   rGB    = new RGB();
            HSL   hSL    = new HSL();
            int   num    = (image.PixelFormat == PixelFormat.Format24bppRgb) ? 3 : 4;
            int   num2   = image.Stride - width * num;
            int   num3   = maskLineSize - width;
            byte *ptr    = (byte *)image.ImageData.ToPointer();

            if (mask == null)
            {
                for (int i = 0; i < height; i++)
                {
                    int num4 = 0;
                    while (num4 < width)
                    {
                        rGB.Red   = ptr[2];
                        rGB.Green = ptr[1];
                        rGB.Blue  = *ptr;
                        HSL.FromRGB(rGB, hSL);
                        array[(int)(hSL.Saturation * 255f)]++;
                        array2[(int)(hSL.Luminance * 255f)]++;
                        pixels++;
                        if ((double)hSL.Luminance != 0.0)
                        {
                            array3[(int)(hSL.Saturation * 255f)]++;
                            array4[(int)(hSL.Luminance * 255f)]++;
                            pixelsWithoutBlack++;
                        }
                        num4++;
                        ptr += num;
                    }
                    ptr += num2;
                }
            }
            else
            {
                for (int j = 0; j < height; j++)
                {
                    int num5 = 0;
                    while (num5 < width)
                    {
                        if (*mask != 0)
                        {
                            rGB.Red   = ptr[2];
                            rGB.Green = ptr[1];
                            rGB.Blue  = *ptr;
                            HSL.FromRGB(rGB, hSL);
                            array[(int)(hSL.Saturation * 255f)]++;
                            array2[(int)(hSL.Luminance * 255f)]++;
                            pixels++;
                            if ((double)hSL.Luminance != 0.0)
                            {
                                array3[(int)(hSL.Saturation * 255f)]++;
                                array4[(int)(hSL.Luminance * 255f)]++;
                                pixelsWithoutBlack++;
                            }
                        }
                        num5++;
                        ptr += num;
                        mask++;
                    }
                    ptr  += num2;
                    mask += num3;
                }
            }
            saturation             = new ContinuousHistogram(array, new Range(0f, 1f));
            luminance              = new ContinuousHistogram(array2, new Range(0f, 1f));
            saturationWithoutBlack = new ContinuousHistogram(array3, new Range(0f, 1f));
            luminanceWithoutBlack  = new ContinuousHistogram(array4, new Range(0f, 1f));
        }