Changeset 584 for ImageMagick/trunk

Show
Ignore:
Timestamp:
11/13/09 12:05:42 (4 months ago)
Author:
cristy
Message:
 
Location:
ImageMagick/trunk
Files:
8 modified

Legend:

Unmodified
Added
Removed
  • ImageMagick/trunk/Magick++/lib/Image.cpp

    r247 r584  
    10671067} 
    10681068 
    1069 // Convolve image.  Applies a mathematical expression to the image. 
     1069// Fx image.  Applies a mathematical expression to the image. 
     1070void Magick::Image::fx ( const std::string expression ) 
     1071{ 
     1072  ExceptionInfo exceptionInfo; 
     1073  GetExceptionInfo( &exceptionInfo ); 
     1074  MagickCore::Image* newImage = 
     1075    FxImageChannel ( image(), DefaultChannels, expression.c_str(), &exceptionInfo ); 
     1076  replaceImage( newImage ); 
     1077  throwException( exceptionInfo ); 
     1078  (void) DestroyExceptionInfo( &exceptionInfo ); 
     1079} 
    10701080void Magick::Image::fx ( const std::string expression, 
    10711081                         const Magick::ChannelType channel ) 
  • ImageMagick/trunk/Magick++/lib/Magick++/Image.h

    r247 r584  
    361361 
    362362    // Applies a mathematical expression to the image. 
     363    void            fx ( const std::string expression ); 
    363364    void            fx ( const std::string expression, 
    364365                         const Magick::ChannelType channel ); 
  • ImageMagick/trunk/PerlMagick/Magick.xs

    r409 r584  
    99349934        case 125:  /* InverseFourierTransformImage */ 
    99359935        { 
    9936           image=InverseFourierTransformImage(image, 
     9936          image=InverseFourierTransformImage(image,image->next, 
    99379937            argument_list[0].long_reference != 0 ? MagickTrue : MagickFalse, 
    99389938            exception); 
  • ImageMagick/trunk/magick/fourier.c

    r532 r584  
    736736%  The format of the InverseFourierTransformImage method is: 
    737737% 
    738 %      Image *InverseFourierTransformImage(const Image *images, 
    739 %        const MagickBooleanType modulus,ExceptionInfo *exception) 
     738%      Image *InverseFourierTransformImage(const Image *magnitude_image, 
     739%        const Image *phase_image,const MagickBooleanType modulus, 
     740%        ExceptionInfo *exception) 
    740741% 
    741742%  A description of each parameter follows: 
    742743% 
    743 %    o images: the image sequence. 
     744%    o magnitude_image: the magnitude or real image. 
     745% 
     746%    o phase_image: the phase or imaginary image. 
    744747% 
    745748%    o modulus: if true, return transform as a magnitude / phase pair 
     
    776779 
    777780static MagickBooleanType InverseFourier(FourierInfo *fourier_info, 
    778   const Image *images,fftw_complex *fourier,ExceptionInfo *exception) 
     781  const Image *magnitude_image,const Image *phase_image,fftw_complex *fourier, 
     782  ExceptionInfo *exception) 
    779783{ 
    780784  CacheView 
     
    788792    *phase_source; 
    789793 
    790   Image 
    791     *magnitude_image, 
    792     *phase_image; 
    793  
    794794  long 
    795795    y; 
     
    811811    Inverse fourier - read image and break down into a double array. 
    812812  */ 
    813   assert(images != (Image *) NULL); 
    814   assert(images->signature == MagickSignature); 
    815   if (images->debug != MagickFalse) 
    816     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",images->filename); 
    817   magnitude_image=GetFirstImageInList(images), 
    818   phase_image=GetNextImageInList(images); 
    819   if (phase_image == (Image *) NULL) 
    820     { 
    821       (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 
    822         "ImageSequenceRequired","`%s'",images->filename); 
    823       return(MagickFalse); 
    824     } 
    825813  magnitude_source=(double *) AcquireQuantumMemory((size_t) 
    826814    fourier_info->height,fourier_info->width*sizeof(*magnitude_source)); 
     
    828816    { 
    829817      (void) ThrowMagickException(exception,GetMagickModule(), 
    830         ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); 
     818        ResourceLimitError,"MemoryAllocationFailed","`%s'", 
     819        magnitude_image->filename); 
    831820      return(MagickFalse); 
    832821    } 
     
    836825    { 
    837826      (void) ThrowMagickException(exception,GetMagickModule(), 
    838         ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); 
     827        ResourceLimitError,"MemoryAllocationFailed","`%s'", 
     828        magnitude_image->filename); 
    839829      magnitude_source=(double *) RelinquishMagickMemory(magnitude_source); 
    840830      return(MagickFalse); 
     
    956946    { 
    957947      (void) ThrowMagickException(exception,GetMagickModule(), 
    958         ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); 
     948        ResourceLimitError,"MemoryAllocationFailed","`%s'", 
     949        magnitude_image->filename); 
    959950      magnitude_source=(double *) RelinquishMagickMemory(magnitude_source); 
    960951      phase_source=(double *) RelinquishMagickMemory(phase_source); 
     
    969960    { 
    970961      (void) ThrowMagickException(exception,GetMagickModule(), 
    971         ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); 
     962        ResourceLimitError,"MemoryAllocationFailed","`%s'", 
     963        magnitude_image->filename); 
    972964      phase_source=(double *) RelinquishMagickMemory(phase_source); 
    973965      return(MagickFalse); 
     
    10991091} 
    11001092 
    1101 static MagickBooleanType InverseFourierTransformChannel(const Image *images, 
     1093static MagickBooleanType InverseFourierTransformChannel( 
     1094  const Image *magnitude_image,const Image *phase_image, 
    11021095  const ChannelType channel,const MagickBooleanType modulus, 
    11031096  Image *fourier_image,ExceptionInfo *exception) 
     
    11191112    extent; 
    11201113 
    1121   fourier_info.width=images->columns; 
    1122   if ((images->columns != images->rows) || ((images->columns % 2) != 0) || 
    1123       ((images->rows % 2) != 0)) 
    1124     { 
    1125       extent=images->columns < images->rows ? images->rows : images->columns; 
     1114  fourier_info.width=magnitude_image->columns; 
     1115  if ((magnitude_image->columns != magnitude_image->rows) || 
     1116      ((magnitude_image->columns % 2) != 0) || 
     1117      ((magnitude_image->rows % 2) != 0)) 
     1118    { 
     1119      extent=magnitude_image->columns < magnitude_image->rows ? 
     1120        magnitude_image->rows : magnitude_image->columns; 
    11261121      fourier_info.width=(extent & 0x01) == 1 ? extent+1UL : extent; 
    11271122    } 
     
    11351130    { 
    11361131      (void) ThrowMagickException(exception,GetMagickModule(), 
    1137         ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); 
     1132        ResourceLimitError,"MemoryAllocationFailed","`%s'", 
     1133        magnitude_image->filename); 
    11381134      return(MagickFalse); 
    11391135    } 
     
    11431139    { 
    11441140      (void) ThrowMagickException(exception,GetMagickModule(), 
    1145         ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); 
     1141        ResourceLimitError,"MemoryAllocationFailed","`%s'", 
     1142        magnitude_image->filename); 
    11461143      magnitude=(double *) RelinquishMagickMemory(magnitude); 
    11471144      return(MagickFalse); 
     
    11521149    { 
    11531150      (void) ThrowMagickException(exception,GetMagickModule(), 
    1154         ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); 
     1151        ResourceLimitError,"MemoryAllocationFailed","`%s'", 
     1152        magnitude_image->filename); 
    11551153      phase=(double *) RelinquishMagickMemory(phase); 
    11561154      magnitude=(double *) RelinquishMagickMemory(magnitude); 
    11571155      return(MagickFalse); 
    11581156    } 
    1159   status=InverseFourier(&fourier_info,images,fourier,exception); 
     1157  status=InverseFourier(&fourier_info,magnitude_image,phase_image,fourier, 
     1158   exception); 
    11601159  if (status != MagickFalse) 
    11611160    status=InverseFourierTransform(&fourier_info,fourier,fourier_image, 
     
    11681167#endif 
    11691168 
    1170 MagickExport Image *InverseFourierTransformImage(const Image *images, 
    1171   const MagickBooleanType modulus,ExceptionInfo *exception) 
     1169MagickExport Image *InverseFourierTransformImage(const Image *magnitude_image, 
     1170  const Image *phase_image,const MagickBooleanType modulus, 
     1171  ExceptionInfo *exception) 
    11721172{ 
    11731173  Image 
    11741174    *fourier_image; 
    11751175 
     1176  assert(magnitude_image != (Image *) NULL); 
     1177  assert(magnitude_image->signature == MagickSignature); 
     1178  if (magnitude_image->debug != MagickFalse) 
     1179    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s", 
     1180      magnitude_image->filename); 
     1181  if (phase_image == (Image *) NULL) 
     1182    { 
     1183      (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 
     1184        "ImageSequenceRequired","`%s'",magnitude_image->filename); 
     1185      return(MagickFalse); 
     1186    } 
    11761187#if !defined(MAGICKCORE_FFTW_DELEGATE) 
    11771188  fourier_image=(Image *) NULL; 
     
    11791190  (void) ThrowMagickException(exception,GetMagickModule(), 
    11801191    MissingDelegateWarning,"DelegateLibrarySupportNotBuiltIn","`%s' (FFTW)", 
    1181     images->filename); 
     1192    magnitude_image->filename); 
    11821193#else 
    11831194  { 
    1184     fourier_image=CloneImage(images,images->columns,images->rows,MagickFalse, 
    1185       exception); 
     1195    fourier_image=CloneImage(magnitude_image,magnitude_image->columns, 
     1196      magnitude_image->rows,MagickFalse,exception); 
    11861197    if (fourier_image != (Image *) NULL) 
    11871198      { 
     
    11941205 
    11951206        status=MagickTrue; 
    1196         is_gray=IsGrayImage(images,exception); 
    1197         if ((is_gray != MagickFalse) && (images->next != (Image *) NULL)) 
    1198           is_gray=IsGrayImage(images->next,exception); 
     1207        is_gray=IsGrayImage(magnitude_image,exception); 
     1208        if (is_gray != MagickFalse) 
     1209          is_gray=IsGrayImage(phase_image,exception); 
    11991210#if defined(MAGICKCORE_OPENMP_SUPPORT) 
    12001211        #pragma omp parallel for schedule(dynamic,4) shared(status) 
     
    12121223              if (is_gray != MagickFalse) 
    12131224                { 
    1214                   thread_status=InverseFourierTransformChannel(images, 
    1215                     GrayChannels,modulus,fourier_image,exception); 
     1225                  thread_status=InverseFourierTransformChannel(magnitude_image, 
     1226                    phase_image,GrayChannels,modulus,fourier_image,exception); 
    12161227                  break; 
    12171228                } 
    1218               thread_status=InverseFourierTransformChannel(images,RedChannel, 
    1219                 modulus,fourier_image,exception); 
     1229              thread_status=InverseFourierTransformChannel(magnitude_image, 
     1230                phase_image,RedChannel,modulus,fourier_image,exception); 
    12201231              break; 
    12211232            } 
     
    12231234            { 
    12241235              if (is_gray == MagickFalse) 
    1225                 thread_status=InverseFourierTransformChannel(images, 
    1226                   GreenChannel,modulus,fourier_image,exception); 
     1236                thread_status=InverseFourierTransformChannel(magnitude_image, 
     1237                  phase_image,GreenChannel,modulus,fourier_image,exception); 
    12271238              break; 
    12281239            } 
     
    12301241            { 
    12311242              if (is_gray == MagickFalse) 
    1232                 thread_status=InverseFourierTransformChannel(images,BlueChannel, 
    1233                   modulus,fourier_image,exception); 
     1243                thread_status=InverseFourierTransformChannel(magnitude_image, 
     1244                  phase_image,BlueChannel,modulus,fourier_image,exception); 
    12341245              break; 
    12351246            } 
    12361247            case 3: 
    12371248            { 
    1238               if (images->matte != MagickFalse) 
    1239                 thread_status=InverseFourierTransformChannel(images, 
    1240                   OpacityChannel,modulus,fourier_image,exception); 
     1249              if (magnitude_image->matte != MagickFalse) 
     1250                thread_status=InverseFourierTransformChannel(magnitude_image, 
     1251                  phase_image,OpacityChannel,modulus,fourier_image,exception); 
    12411252              break; 
    12421253            } 
    12431254            case 4: 
    12441255            { 
    1245               if (images->colorspace == CMYKColorspace) 
    1246                 thread_status=InverseFourierTransformChannel(images, 
    1247                   IndexChannel,modulus,fourier_image,exception); 
     1256              if (magnitude_image->colorspace == CMYKColorspace) 
     1257                thread_status=InverseFourierTransformChannel(magnitude_image, 
     1258                  phase_image,IndexChannel,modulus,fourier_image,exception); 
    12481259              break; 
    12491260            } 
  • ImageMagick/trunk/magick/fourier.h

    r1 r584  
    2626 *ForwardFourierTransformImage(const Image *,const MagickBooleanType, 
    2727   ExceptionInfo *), 
    28  *InverseFourierTransformImage(const Image *,const MagickBooleanType, 
    29    ExceptionInfo *); 
     28 *InverseFourierTransformImage(const Image *,const Image *, 
     29   const MagickBooleanType,ExceptionInfo *); 
    3030 
    3131#if defined(__cplusplus) || defined(c_plusplus) 
  • ImageMagick/trunk/wand/magick-image.c

    r327 r584  
    62886288% 
    62896289%      MagickBooleanType MagickInverseFourierTransformImage( 
    6290 %        MagickWand *wand,const MagickBooleanType magnitude) 
    6291 % 
    6292 %  A description of each parameter follows: 
    6293 % 
    6294 %    o wand: the magick wand. 
     6290%        MagickWand *magnitude_wand,MagickWand *phase_wand, 
     6291%        const MagickBooleanType magnitude) 
     6292% 
     6293%  A description of each parameter follows: 
     6294% 
     6295%    o magnitude_wand: the magnitude or real wand. 
     6296% 
     6297%    o phase_wand: the phase or imaginary wand. 
    62956298% 
    62966299%    o magnitude: if true, return as magnitude / phase pair otherwise a real / 
     
    62996302*/ 
    63006303WandExport MagickBooleanType MagickInverseFourierTransformImage( 
    6301   MagickWand *wand,const MagickBooleanType magnitude) 
     6304  MagickWand *magnitude_wand,MagickWand *phase_wand, 
     6305  const MagickBooleanType magnitude) 
    63026306{ 
    63036307  Image 
    63046308    *inverse_image; 
    63056309 
    6306   assert(wand != (MagickWand *) NULL); 
    6307   assert(wand->signature == WandSignature); 
    6308   if (wand->debug != MagickFalse) 
    6309     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 
    6310   if (wand->images == (Image *) NULL) 
    6311     ThrowWandException(WandError,"ContainsNoImages",wand->name); 
    6312   inverse_image=InverseFourierTransformImage(wand->images,magnitude, 
    6313     wand->exception); 
     6310  MagickWand 
     6311    *wand; 
     6312 
     6313  assert(magnitude_wand != (MagickWand *) NULL); 
     6314  assert(magnitude_wand->signature == WandSignature); 
     6315  if (magnitude_wand->debug != MagickFalse) 
     6316    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s", 
     6317      magnitude_wand->name); 
     6318  wand=magnitude_wand; 
     6319  if (magnitude_wand->images == (Image *) NULL) 
     6320    ThrowWandException(WandError,"ContainsNoImages", 
     6321      magnitude_wand->name); 
     6322  assert(phase_wand != (MagickWand *) NULL); 
     6323  assert(phase_wand->signature == WandSignature); 
     6324  inverse_image=InverseFourierTransformImage(magnitude_wand->images, 
     6325    phase_wand->images,magnitude,wand->exception); 
    63146326  if (inverse_image == (Image *) NULL) 
    63156327    return(MagickFalse); 
  • ImageMagick/trunk/wand/magick-image.h

    r207 r584  
    194194    const unsigned long,const unsigned long,const char *,const StorageType, 
    195195    const void *), 
    196   MagickInverseFourierTransformImage(MagickWand *,const MagickBooleanType), 
     196  MagickInverseFourierTransformImage(MagickWand *,MagickWand *, 
     197    const MagickBooleanType), 
    197198  MagickLabelImage(MagickWand *,const char *), 
    198199  MagickLevelImage(MagickWand *,const double,const double,const double), 
  • ImageMagick/trunk/wand/mogrify.c

    r562 r584  
    77047704            */ 
    77057705            (void) SyncImagesSettings(image_info,*images); 
    7706             fourier_image=InverseFourierTransformImage(*images, 
     7706            fourier_image=InverseFourierTransformImage(*images,(*images)->next, 
    77077707              *option == '-' ? MagickTrue : MagickFalse,exception); 
    77087708            if (fourier_image == (Image *) NULL)