From: cristy Date: Mon, 6 May 2013 23:37:48 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~3715 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c282d1b30162621c02ffe38060889a920027e870;p=imagemagick --- diff --git a/MagickCore/colorspace.c b/MagickCore/colorspace.c index 830c6beb2..a656de82c 100644 --- a/MagickCore/colorspace.c +++ b/MagickCore/colorspace.c @@ -167,6 +167,14 @@ static void ConvertRGBToLuv(const double red,const double green, ConvertXYZToLuv(X,Y,Z,L,u,v); } +static void ConvertRGBToYDbDr(const double red,const double green, + const double blue,double *Y,double *Db,double *Dr) +{ + *Y=QuantumScale*(0.298839*red+0.586811*green+0.114350*blue); + *Db=QuantumScale*((-0.450)*red-0.883*green+1.333*blue)+0.5; + *Dr=QuantumScale*(1.333*red-0.116*green-0.217*blue)+0.5; +} + static void ConvertRGBToYIQ(const double red,const double green, const double blue,double *Y,double *I,double *Q) { @@ -369,6 +377,7 @@ static MagickBooleanType sRGBTransformImage(Image *image, case LuvColorspace: case XYZColorspace: case YCbCrColorspace: + case YDbDrColorspace: case YIQColorspace: case YPbPrColorspace: case YUVColorspace: @@ -499,6 +508,11 @@ static MagickBooleanType sRGBTransformImage(Image *image, ConvertRGBToYCbCr(red,green,blue,&X,&Y,&Z); break; } + case YDbDrColorspace: + { + ConvertRGBToYDbDr(red,green,blue,&X,&Y,&Z); + break; + } case YIQColorspace: { ConvertRGBToYIQ(red,green,blue,&X,&Y,&Z); @@ -1261,6 +1275,17 @@ static void ConvertYIQToRGB(const double Y,const double I,const double Q, (Q-0.5)); } +static void ConvertYDbDrToRGB(const double Y,const double Db,const double Dr, + double *red,double *green,double *blue) +{ + *red=QuantumRange*(Y-9.2303716147657e-05*(Db-0.5)+ + 0.52591263066186533*(Dr-0.5)); + *green=QuantumRange*(Y-12913289889050927*(Db-0.5)- + 0.26789932820759876*(Dr-0.5)); + *blue=QuantumRange*(Y+0.66467905997895482*(Db-0.5)+ + 7.9202543533108e-05*(Dr-0.5)); +} + static void ConvertYUVToRGB(const double Y,const double U,const double V, double *red,double *green,double *blue) { @@ -1678,6 +1703,7 @@ static MagickBooleanType TransformsRGBImage(Image *image, case LuvColorspace: case XYZColorspace: case YCbCrColorspace: + case YDbDrColorspace: case YIQColorspace: case YPbPrColorspace: case YUVColorspace: @@ -1808,6 +1834,11 @@ static MagickBooleanType TransformsRGBImage(Image *image, ConvertYCbCrToRGB(X,Y,Z,&red,&green,&blue); break; } + case YDbDrColorspace: + { + ConvertYDbDrToRGB(X,Y,Z,&red,&green,&blue); + break; + } case YIQColorspace: { ConvertYIQToRGB(X,Y,Z,&red,&green,&blue); diff --git a/MagickCore/colorspace.h b/MagickCore/colorspace.h index 341418361..135d0163e 100644 --- a/MagickCore/colorspace.h +++ b/MagickCore/colorspace.h @@ -52,6 +52,7 @@ typedef enum XYZColorspace, /* IEEE Color Reference colorspace */ YCbCrColorspace, YCCColorspace, + YDbDrColorspace, YIQColorspace, YPbPrColorspace, YUVColorspace diff --git a/MagickCore/option.c b/MagickCore/option.c index bdf50d4d7..c03002408 100644 --- a/MagickCore/option.c +++ b/MagickCore/option.c @@ -908,6 +908,7 @@ static const OptionInfo { "Transparent", TransparentColorspace, UndefinedOptionFlag, MagickFalse }, { "XYZ", XYZColorspace, UndefinedOptionFlag, MagickFalse }, { "YCbCr", YCbCrColorspace, UndefinedOptionFlag, MagickFalse }, + { "YDbDr", YDbDrColorspace, UndefinedOptionFlag, MagickFalse }, { "YCC", YCCColorspace, UndefinedOptionFlag, MagickFalse }, { "YIQ", YIQColorspace, UndefinedOptionFlag, MagickFalse }, { "YPbPr", YPbPrColorspace, UndefinedOptionFlag, MagickFalse },