]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Mon, 6 May 2013 23:37:48 +0000 (23:37 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Mon, 6 May 2013 23:37:48 +0000 (23:37 +0000)
MagickCore/colorspace.c
MagickCore/colorspace.h
MagickCore/option.c

index 830c6beb23e31c2c02d6ae4ce7d62a0f785df746..a656de82c119621eec7ebfae70cf127eda07bb65 100644 (file)
@@ -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);
index 3414183616f47c80fb9c7285f10278539e0cb7c0..135d0163e58aad37b73fa185ca87214e399bd680 100644 (file)
@@ -52,6 +52,7 @@ typedef enum
   XYZColorspace,           /* IEEE Color Reference colorspace */
   YCbCrColorspace,
   YCCColorspace,
+  YDbDrColorspace,
   YIQColorspace,
   YPbPrColorspace,
   YUVColorspace
index bdf50d4d7c174b3476ecf721141d3d25742993ce..c030024086f55764c4fe5e212b88e9d5a4baf843 100644 (file)
@@ -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 },