/// <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; }
/// <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"); } }
/// <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) { }
/// <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]); }
/// <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; }
/// <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) { }
/// <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(); }
/// <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(); }
/// <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(); }
/// <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(); } }
/// <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)); }
/// <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)); }
/// <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]); }
/// <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"); } }
/// <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) { }
/// <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(); }
/// <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(); }
/// <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) { }
/// <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) { }
/// <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) { }
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)); } } }