Exemplo n.º 1
0
 /// <summary>
 /// Creates a new instance of a YCbCr Color
 /// </summary>
 /// <param name="Y">Luma-value (0 to 255)</param>
 /// <param name="Cb">Blue-Yellow Chrominance-value (0 to 255)</param>
 /// <param name="Cr">Red-Green Chrominance-value (0 to 255)</param>
 /// <param name="Space">The colorspace this color is in</param>
 /// <param name="BaseSpace">The colorspace this color is based on</param>
 public BColorYCbCr(YCbCrSpaceName Space, RGBSpaceName BaseSpace, byte Y, byte Cb, byte Cr)
     : base()
 {
     this.Y         = Y;
     this.Cb        = Cb;
     this.Cr        = Cr;
     this.Space     = YCbCrColorspace.GetColorspace(Space);
     this.BaseSpace = RGBColorspace.GetColorspace(BaseSpace);
     wp             = this.Space.ReferenceWhite.Name;
 }
Exemplo n.º 2
0
        /// <summary>
        /// Get a colorspace from the name
        /// </summary>
        /// <param name="name">The name of the colorspace</param>
        /// <returns>The named colorspace</returns>
        public static YCbCrColorspace GetColorspace(YCbCrSpaceName name)
        {
            switch (name)
            {
            case YCbCrSpaceName.ITU_R_BT601_625:
                return(new ITU_R_BT601_625());

            case YCbCrSpaceName.ITU_R_BT601_525:
                return(new ITU_R_BT601_525());

            case YCbCrSpaceName.ITU_R_BT709_1125:
                return(new ITU_R_BT709_1125());

            case YCbCrSpaceName.ITU_R_BT709_1250:
                return(new ITU_R_BT709_1250());

            default:
                throw new Exception("Colorspace not found");
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Creates a new instance of a YCbCr Color
 /// </summary>
 /// <param name="Y">Luma-value (0 to 255)</param>
 /// <param name="Cb">Blue-Yellow Chrominance-value (0 to 255)</param>
 /// <param name="Cr">Red-Green Chrominance-value (0 to 255)</param>
 /// <param name="Space">The colorspace this color is in</param>
 public BColorYCbCr(YCbCrSpaceName Space, byte Y, byte Cb, byte Cr)
     : this(Space, ColorConverter.StandardColorspace, Y, Cb, Cr)
 {
 }
Exemplo n.º 4
0
 /// <summary>
 /// Creates a new instance of a YCbCr Color
 /// </summary>
 /// <param name="Y">Luma-value (0 - 65535)</param>
 /// <param name="Cb">Blue-Yellow Chrominance-value (0 - 65535)</param>
 /// <param name="Cr">Red-Green Chrominance-value (0 - 65535)</param>
 /// <param name="Space">The colorspace this color is in</param>
 /// <param name="BaseSpace">The colorspace this color is based on</param>
 public UColorYCbCr(YCbCrSpaceName Space, RGBSpaceName BaseSpace, ushort Y, ushort Cb, ushort Cr)
     : base()
 {
     this.Y = Y;
     this.Cb = Cb;
     this.Cr = Cr;
     this.Space = YCbCrColorspace.GetColorspace(Space);
     this.BaseSpace = RGBColorspace.GetColorspace(BaseSpace);
     wp = this.Space.ReferenceWhite.Name;
 }
 /// <summary>
 /// Converts a color to a YCbCr color
 /// </summary>
 /// <param name="InColor">The color to convert</param>
 /// <returns>The converted color</returns>
 public ColorYCbCr ToYCbCr(Color InColor)
 {
     OutputModel = ColorModel.YCbCr;
     RGBSpace = StandardColorspace;
     YCbCrSpace = StandardYCbCrSpace;
     OutReferenceWhite = ReferenceWhite;
     SetInputColor(InColor);
     varArr = Do();
     return new ColorYCbCr(YCbCrSpace, RGBSpace, varArr[0], varArr[1], varArr[2]);
 }
Exemplo n.º 6
0
 /// <summary>
 /// Creates a new instance of a YCbCr Color
 /// </summary>
 /// <param name="Y">Luma-value (0.0 - 1.0)</param>
 /// <param name="Cb">Blue-Yellow Chrominance-value (0.0 - 1.0)</param>
 /// <param name="Cr">Red-Green Chrominance-value (0.0 - 1.0)</param>
 /// <param name="Space">The colorspace this color is in</param>
 /// <param name="BaseSpace">The colorspace this color is based on</param>
 public ColorYCbCr(YCbCrSpaceName Space, RGBSpaceName BaseSpace, double Y, double Cb, double Cr)
     : base()
 {
     this.Y = Y;
     this.Cb = Cb;
     this.Cr = Cr;
     this.Space = YCbCrColorspace.GetColorspace(Space);
     this.BaseSpace = RGBColorspace.GetColorspace(BaseSpace);
     wp = this.Space.ReferenceWhite;
 }
Exemplo n.º 7
0
 /// <summary>
 /// Creates a new instance of a YCbCr Color
 /// </summary>
 /// <param name="Space">The colorspace this color is in</param>
 public ColorYCbCr(YCbCrSpaceName Space)
     : this(Space, ColorConverter.StandardColorspace, 0, 0, 0)
 {
 }
Exemplo n.º 8
0
 /// <summary>
 /// Creates a new instance of a YCbCr Color
 /// </summary>
 /// <param name="Space">The colorspace this color is in</param>
 public BColorYCbCr(YCbCrSpaceName Space)
     : this(Space, ColorConverter.StandardColorspace, 0, 0, 0)
 {
 }
 /// <summary>
 /// Converts from one colorspace to another
 /// </summary>
 /// <param name="inColor">Input color</param>
 /// <param name="outModel">Output colormodel</param>
 /// <returns>Returns a color with the converted values from the input</returns>
 internal double[] Do(UColor inColor, ColorModel outModel)
 {
     OutputModel = outModel;
     RGBSpace = StandardColorspace;
     YCbCrSpace = StandardYCbCrSpace;
     OutReferenceWhite = ReferenceWhite;
     SetInputColor(inColor);
     return Do();
 }
Exemplo n.º 10
0
 /// <summary>
 /// Converts from one colorspace to another
 /// </summary>
 /// <param name="inColor">Input color</param>
 /// <param name="outModel">Output colormodel</param>
 /// <param name="RefWhite">The reference white the output should have</param>
 /// <returns>Returns a color with the converted values from the input</returns>
 internal double[] Do(UColor inColor, ColorModel outModel, WhitepointName RefWhite)
 {
     if (RefWhite != WhitepointName.Custom) OutReferenceWhite = WhitepointArr[(int)RefWhite];
     else OutReferenceWhite = ReferenceWhite;
     OutputModel = outModel;
     RGBSpace = StandardColorspace;
     YCbCrSpace = StandardYCbCrSpace;
     SetInputColor(inColor);
     return Do();
 }
Exemplo n.º 11
0
 /// <summary>
 /// Converts from one colorspace to another
 /// </summary>
 /// <param name="inColor">Input color</param>
 /// <param name="outModel">Output colormodel</param>
 /// <param name="colorspace">The colorspace the output should be in</param>
 /// <returns>Returns a color with the converted values from the input</returns>
 internal double[] Do(UColor inColor, ColorModel outModel, RGBSpaceName colorspace)
 {
     OutputModel = outModel;
     RGBSpace = colorspace;
     YCbCrSpace = StandardYCbCrSpace;
     OutReferenceWhite = WhitepointArr[(int)RGBColorspace.GetWhitepointName(colorspace)];
     SetInputColor(inColor);
     return Do();
 }
Exemplo n.º 12
0
        /// <summary>
        /// Initiates the color conversion
        /// </summary>
        public static void Init()
        {
            if (!IsInit)
            {
                IsInit = true;

                AD = AdaptionMethod.Bradford;
                ReferenceWhite = new Whitepoint(WhitepointName.D50);
                StandardColorspace = RGBSpaceName.sRGB;
                PreferredRenderingIntent = RenderingIntent.RelativeColorimetric;
                StandardYCbCrSpace = YCbCrSpaceName.ITU_R_BT601_525;

                RGBSpaceName[] arr1 = (RGBSpaceName[])Enum.GetValues(typeof(RGBSpaceName));
                RGBspaceArr = new RGBColorspace[arr1.Length];
                arr1 = arr1.Where(t => t != RGBSpaceName.ICC).ToArray();
                for (int i = 0; i < arr1.Length; i++) RGBspaceArr[i] = RGBColorspace.GetColorspace(arr1[i]);

                YCbCrSpaceName[] arr2 = (YCbCrSpaceName[])Enum.GetValues(typeof(YCbCrSpaceName));
                YCbCrSpaceArr = new YCbCrColorspace[arr2.Length];
                arr2 = arr2.Where(t => t != YCbCrSpaceName.ICC).ToArray();
                for (int i = 0; i < arr2.Length; i++) YCbCrSpaceArr[i] = YCbCrColorspace.GetColorspace(arr2[i]);

                WhitepointName[] arr3 = (WhitepointName[])Enum.GetValues(typeof(WhitepointName));
                WhitepointArr = new Whitepoint[arr3.Length];
                arr3 = arr3.Where(t => t != WhitepointName.Custom).ToArray();
                for (int i = 0; i < arr3.Length; i++) WhitepointArr[i] = new Whitepoint(arr3[i]);

                MatrixPrecalculation();
            }
        }
Exemplo n.º 13
0
 /// <summary>
 /// Converts a color to a YCbCr color
 /// </summary>
 /// <param name="InColor">The color to convert</param>
 /// <param name="BaseColorspace">The colorspace the converted color will be based on</param>
 /// <param name="colorspace">The colorspace to be used for the converted color</param>
 /// <returns>The converted color</returns>
 public UColorYCbCr ToYCbCr(UColor InColor, RGBSpaceName BaseColorspace, YCbCrSpaceName colorspace)
 {
     varArr = Do(InColor, ColorModel.YCbCr, BaseColorspace, colorspace);
     return new UColorYCbCr(YCbCrSpace, RGBSpace, (ushort)(varArr[0] * 65535), (ushort)(varArr[1] * 65535), (ushort)(varArr[2] * 65535));
 }
Exemplo n.º 14
0
 /// <summary>
 /// Converts a color to a YCbCr color
 /// </summary>
 /// <param name="InColor">The color to convert</param>
 /// <param name="BaseColorspace">The colorspace the converted color will be based on</param>
 /// <param name="colorspace">The colorspace to be used for the converted color</param>
 /// <returns>The converted color</returns>
 public BColorYCbCr ToYCbCr(BColor InColor, RGBSpaceName BaseColorspace, YCbCrSpaceName colorspace)
 {
     varArr = Do(InColor, ColorModel.YCbCr, BaseColorspace, colorspace);
     return new BColorYCbCr(YCbCrSpace, RGBSpace, (byte)(varArr[0] * 255), (byte)(varArr[1] * 255), (byte)(varArr[2] * 255));
 }
Exemplo n.º 15
0
 /// <summary>
 /// Converts a color to a YCbCr color
 /// </summary>
 /// <param name="InColor">The color to convert</param>
 /// <param name="BaseColorspace">The colorspace the converted color will be based on</param>
 /// <param name="colorspace">The colorspace to be used for the converted color</param>
 /// <returns>The converted color</returns>
 public ColorYCbCr ToYCbCr(Color InColor, RGBSpaceName BaseColorspace, YCbCrSpaceName colorspace)
 {
     if (colorspace == YCbCrSpaceName.ICC || BaseColorspace == RGBSpaceName.ICC) throw new ArgumentException("ICC colorspace is not accepted with this method. Use the explicit ICC conversion.");
     OutputModel = ColorModel.YCbCr;
     RGBSpace = BaseColorspace;
     YCbCrSpace = colorspace;
     OutReferenceWhite = WhitepointArr[(int)RGBColorspace.GetWhitepointName(BaseColorspace)];
     SetInputColor(InColor);
     varArr = Do();
     return new ColorYCbCr(YCbCrSpace, RGBSpace, varArr[0], varArr[1], varArr[2]);
 }
Exemplo n.º 16
0
        /// <summary>
        /// Get a colorspace from the name
        /// </summary>
        /// <param name="name">The name of the colorspace</param>
        /// <returns>The named colorspace</returns>
        public static YCbCrColorspace GetColorspace(YCbCrSpaceName name)
        {
            switch (name)
            {
                case YCbCrSpaceName.ITU_R_BT601_625:
                    return new ITU_R_BT601_625();
                case YCbCrSpaceName.ITU_R_BT601_525:
                    return new ITU_R_BT601_525();
                case YCbCrSpaceName.ITU_R_BT709_1125:
                    return new ITU_R_BT709_1125();
                case YCbCrSpaceName.ITU_R_BT709_1250:
                    return new ITU_R_BT709_1250();

                default:
                    throw new Exception("Colorspace not found");
            }
        }
Exemplo n.º 17
0
 /// <summary>
 /// Creates a new instance of a YCbCr Color
 /// </summary>
 /// <param name="Space">The colorspace this color is in</param>
 /// <param name="BaseSpace">The colorspace this color is based on</param>
 public BColorYCbCr(YCbCrSpaceName Space, RGBSpaceName BaseSpace)
     : this(Space, BaseSpace, 0, 0, 0)
 {
 }
Exemplo n.º 18
0
 /// <summary>
 /// Initiates the ConvertFast method.
 /// </summary>
 /// <param name="InColor">The type of color that will be used for the conversion</param>
 /// <param name="OutColor">The colormodel that is expected as output</param>
 /// <param name="OutRefWhite">The reference white for the output color</param>
 public void SetFast(Color InColor, ColorModel OutColor, Whitepoint OutRefWhite)
 {
     OutputModel = OutColor;
     RGBSpace = StandardColorspace;
     YCbCrSpace = StandardYCbCrSpace;
     SetFastReferenceWhite(OutRefWhite, RGBSpace);
     SetInputColor(InColor);
     SetFastAction();
 }
Exemplo n.º 19
0
 /// <summary>
 /// Creates a new instance of a YCbCr Color
 /// </summary>
 /// <param name="Y">Luma-value (0 to 255)</param>
 /// <param name="Cb">Blue-Yellow Chrominance-value (0 to 255)</param>
 /// <param name="Cr">Red-Green Chrominance-value (0 to 255)</param>
 /// <param name="Space">The colorspace this color is in</param>
 public BColorYCbCr(YCbCrSpaceName Space, byte Y, byte Cb, byte Cr)
     : this(Space, ColorConverter.StandardColorspace, Y, Cb, Cr)
 {
 }
Exemplo n.º 20
0
 /// <summary>
 /// Initiates the ConvertFast method.
 /// </summary>
 /// <param name="InColor">The type of color that will be used for the conversion</param>
 /// <param name="OutColor">The colormodel that is expected as output</param>
 /// <param name="colorspace">The colorspace for YCbCr output color</param>
 public void SetFast(Color InColor, ColorModel OutColor, YCbCrSpaceName colorspace)
 {
     if (colorspace == YCbCrSpaceName.ICC) throw new ArgumentException("ICC colorspace is not accepted with this method. Use the explicit ICC conversion.");
     OutputModel = OutColor;
     RGBSpace = StandardColorspace;
     YCbCrSpace = colorspace;
     SetFastReferenceWhite(ReferenceWhite, RGBSpace);
     SetInputColor(InColor);
     SetFastAction();
 }
Exemplo n.º 21
0
 /// <summary>
 /// Creates a new instance of a YCbCr Color
 /// </summary>
 /// <param name="Space">The colorspace this color is in</param>
 /// <param name="BaseSpace">The colorspace this color is based on</param>
 public ColorYCbCr(YCbCrSpaceName Space, RGBSpaceName BaseSpace)
     : this(Space, BaseSpace, 0, 0, 0)
 {
 }
Exemplo n.º 22
0
 /// <summary>
 /// Creates a new instance of a YCbCr Color
 /// </summary>
 /// <param name="Y">Luma-value (0 - 65535)</param>
 /// <param name="Cb">Blue-Yellow Chrominance-value (0 - 65535)</param>
 /// <param name="Cr">Red-Green Chrominance-value (0 - 65535)</param>
 /// <param name="Space">The colorspace this color is in</param>
 public UColorYCbCr(YCbCrSpaceName Space, ushort Y, ushort Cb, ushort Cr)
     : this(Space, ColorConverter.StandardColorspace, Y, Cb, Cr)
 {
 }
Exemplo n.º 23
0
 /// <summary>
 /// Creates a new instance of a YCbCr Color
 /// </summary>
 /// <param name="Y">Luma-value (0.0 - 1.0)</param>
 /// <param name="Cb">Blue-Yellow Chrominance-value (0.0 - 1.0)</param>
 /// <param name="Cr">Red-Green Chrominance-value (0.0 - 1.0)</param>
 /// <param name="Space">The colorspace this color is in</param>
 public ColorYCbCr(YCbCrSpaceName Space, double Y, double Cb, double Cr)
     : this(Space, ColorConverter.StandardColorspace, Y, Cb, Cr)
 {
 }
Exemplo n.º 24
0
 /// <summary>
 /// Creates a new instance of a YCbCr Color
 /// </summary>
 /// <param name="Y">Luma-value (0.0 - 1.0)</param>
 /// <param name="Cb">Blue-Yellow Chrominance-value (0.0 - 1.0)</param>
 /// <param name="Cr">Red-Green Chrominance-value (0.0 - 1.0)</param>
 /// <param name="Space">The colorspace this color is in</param>
 public ColorYCbCr(YCbCrSpaceName Space, double Y, double Cb, double Cr)
     : this(Space, ColorConverter.StandardColorspace, Y, Cb, Cr)
 {
 }
Exemplo n.º 25
0
 /// <summary>
 /// Creates a new instance of a YCbCr Color
 /// </summary>
 /// <param name="Y">Luma-value (0 - 65535)</param>
 /// <param name="Cb">Blue-Yellow Chrominance-value (0 - 65535)</param>
 /// <param name="Cr">Red-Green Chrominance-value (0 - 65535)</param>
 /// <param name="Space">The colorspace this color is in</param>
 public UColorYCbCr(YCbCrSpaceName Space, ushort Y, ushort Cb, ushort Cr)
     : this(Space, ColorConverter.StandardColorspace, Y, Cb, Cr)
 {
 }
Exemplo n.º 26
0
        private void Measure(object Data)
        {
            int            end        = (int)((object[])Data)[0];
            Color          FromColor  = (Color)((object[])Data)[1];
            Color          ToColor    = (Color)((object[])Data)[2];
            bool           DoFast     = (bool)((object[])Data)[3];
            Stopwatch      watch      = new Stopwatch();
            Color          From2Color = FromColor;
            ColorConverter conv       = new ColorConverter();

            if (DoFast)
            {
                RGBSpaceName   n = ColorConverter.StandardColorspace;
                YCbCrSpaceName m = ColorConverter.StandardYCbCrSpace;
                if (ToColor.Model == ColorModel.YCbCr)
                {
                    n = ((ColorYCbCr)ToColor).BaseSpaceName;
                    m = ((ColorYCbCr)ToColor).SpaceName;
                }
                else if (ToColor.Model == ColorModel.RGB)
                {
                    n = ((ColorRGB)ToColor).SpaceName;
                }
                else if (ToColor.Model == ColorModel.HSV)
                {
                    n = ((ColorRGB)ToColor).SpaceName;
                }
                else if (ToColor.Model == ColorModel.HSL)
                {
                    n = ((ColorRGB)ToColor).SpaceName;
                }

                if (n != ColorConverter.StandardColorspace)
                {
                    conv.SetFast(FromColor, ToColor.Model, n, m);
                }
                else
                {
                    conv.SetFast(FromColor, ToColor.Model, ToColor.ReferenceWhite);
                }
            }

            for (int i = 0; i < end / Threadcount && !MainWorker.CancellationPending; i++)
            {
                if (DoFast)
                {
                    watch.Start();
                    conv.ConvertFast(FromColor);
                    watch.Stop();
                }
                else
                {
                    if (FromColor.IsICCcolor && !FromColor.IsPCScolor)
                    {
                        watch.Start();
                        From2Color = conv.ToICC(FromColor);
                        watch.Stop();
                    }

                    switch (ToColor.Model)
                    {
                    case ColorModel.CIELab:
                        watch.Start();
                        conv.ToLab(From2Color, ToColor.ReferenceWhite);
                        watch.Stop();
                        break;

                    case ColorModel.CIELCHab:
                        watch.Start();
                        conv.ToLCHab(From2Color, ToColor.ReferenceWhite);
                        watch.Stop();
                        break;

                    case ColorModel.CIELCHuv:
                        watch.Start();
                        conv.ToLCHuv(From2Color, ToColor.ReferenceWhite);
                        watch.Stop();
                        break;

                    case ColorModel.CIELuv:
                        watch.Start();
                        conv.ToLuv(From2Color, ToColor.ReferenceWhite);
                        watch.Stop();
                        break;

                    case ColorModel.CIEXYZ:
                        watch.Start();
                        conv.ToXYZ(From2Color, ToColor.ReferenceWhite);
                        watch.Stop();
                        break;

                    case ColorModel.CIEYxy:
                        watch.Start();
                        conv.ToYxy(From2Color, ToColor.ReferenceWhite);
                        watch.Stop();
                        break;

                    case ColorModel.Gray:
                        watch.Start();
                        conv.ToGray(From2Color, ToColor.ReferenceWhite);
                        watch.Stop();
                        break;

                    case ColorModel.HSL:
                        RGBSpaceName n = ((ColorHSL)ToColor).SpaceName;
                        if (n == RGBSpaceName.ICC)
                        {
                            goto default;
                        }
                        watch.Start();
                        conv.ToHSL(From2Color, n);
                        watch.Stop();
                        break;

                    case ColorModel.HSV:
                        n = ((ColorHSV)ToColor).SpaceName;
                        if (n == RGBSpaceName.ICC)
                        {
                            goto default;
                        }
                        watch.Start();
                        conv.ToHSV(From2Color, n);
                        watch.Stop();
                        break;

                    case ColorModel.RGB:
                        n = ((ColorRGB)ToColor).SpaceName;
                        if (n == RGBSpaceName.ICC)
                        {
                            goto default;
                        }
                        watch.Start();
                        conv.ToRGB(From2Color, n);
                        watch.Stop();
                        break;

                    case ColorModel.YCbCr:
                        n = ((ColorYCbCr)ToColor).BaseSpaceName;
                        YCbCrSpaceName m = ((ColorYCbCr)ToColor).SpaceName;
                        if (m == YCbCrSpaceName.ICC)
                        {
                            goto default;
                        }
                        watch.Start();
                        conv.ToYCbCr(From2Color, n, m);
                        watch.Stop();
                        break;

                    case ColorModel.LCH99:
                        watch.Start();
                        conv.ToLCH99(From2Color);
                        watch.Stop();
                        break;

                    case ColorModel.LCH99b:
                        watch.Start();
                        conv.ToLCH99b(From2Color);
                        watch.Stop();
                        break;

                    case ColorModel.LCH99c:
                        watch.Start();
                        conv.ToLCH99c(From2Color);
                        watch.Stop();
                        break;

                    case ColorModel.LCH99d:
                        watch.Start();
                        conv.ToLCH99d(From2Color);
                        watch.Stop();
                        break;


                    default:
                        watch.Start();
                        conv.ToICC(conv.ToICC_PCS(From2Color, ToICC), ToICC);
                        watch.Stop();
                        break;
                    }
                }

                progress++;
                time += watch.ElapsedTicks;
                if (progress % 100 == 0)
                {
                    MainWorker.ReportProgress(progress * 100 / (end - 1));
                }
            }
        }