Changeset 584 for ImageMagick/trunk
- Timestamp:
- 11/13/09 12:05:42 (4 months ago)
- Location:
- ImageMagick/trunk
- Files:
-
- 8 modified
-
Magick++/lib/Image.cpp (modified) (1 diff)
-
Magick++/lib/Magick++/Image.h (modified) (1 diff)
-
PerlMagick/Magick.xs (modified) (1 diff)
-
magick/fourier.c (modified) (19 diffs)
-
magick/fourier.h (modified) (1 diff)
-
wand/magick-image.c (modified) (2 diffs)
-
wand/magick-image.h (modified) (1 diff)
-
wand/mogrify.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
ImageMagick/trunk/Magick++/lib/Image.cpp
r247 r584 1067 1067 } 1068 1068 1069 // Convolve image. Applies a mathematical expression to the image. 1069 // Fx image. Applies a mathematical expression to the image. 1070 void 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 } 1070 1080 void Magick::Image::fx ( const std::string expression, 1071 1081 const Magick::ChannelType channel ) -
ImageMagick/trunk/Magick++/lib/Magick++/Image.h
r247 r584 361 361 362 362 // Applies a mathematical expression to the image. 363 void fx ( const std::string expression ); 363 364 void fx ( const std::string expression, 364 365 const Magick::ChannelType channel ); -
ImageMagick/trunk/PerlMagick/Magick.xs
r409 r584 9934 9934 case 125: /* InverseFourierTransformImage */ 9935 9935 { 9936 image=InverseFourierTransformImage(image, 9936 image=InverseFourierTransformImage(image,image->next, 9937 9937 argument_list[0].long_reference != 0 ? MagickTrue : MagickFalse, 9938 9938 exception); -
ImageMagick/trunk/magick/fourier.c
r532 r584 736 736 % The format of the InverseFourierTransformImage method is: 737 737 % 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) 740 741 % 741 742 % A description of each parameter follows: 742 743 % 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. 744 747 % 745 748 % o modulus: if true, return transform as a magnitude / phase pair … … 776 779 777 780 static 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) 779 783 { 780 784 CacheView … … 788 792 *phase_source; 789 793 790 Image791 *magnitude_image,792 *phase_image;793 794 794 long 795 795 y; … … 811 811 Inverse fourier - read image and break down into a double array. 812 812 */ 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 }825 813 magnitude_source=(double *) AcquireQuantumMemory((size_t) 826 814 fourier_info->height,fourier_info->width*sizeof(*magnitude_source)); … … 828 816 { 829 817 (void) ThrowMagickException(exception,GetMagickModule(), 830 ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); 818 ResourceLimitError,"MemoryAllocationFailed","`%s'", 819 magnitude_image->filename); 831 820 return(MagickFalse); 832 821 } … … 836 825 { 837 826 (void) ThrowMagickException(exception,GetMagickModule(), 838 ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); 827 ResourceLimitError,"MemoryAllocationFailed","`%s'", 828 magnitude_image->filename); 839 829 magnitude_source=(double *) RelinquishMagickMemory(magnitude_source); 840 830 return(MagickFalse); … … 956 946 { 957 947 (void) ThrowMagickException(exception,GetMagickModule(), 958 ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); 948 ResourceLimitError,"MemoryAllocationFailed","`%s'", 949 magnitude_image->filename); 959 950 magnitude_source=(double *) RelinquishMagickMemory(magnitude_source); 960 951 phase_source=(double *) RelinquishMagickMemory(phase_source); … … 969 960 { 970 961 (void) ThrowMagickException(exception,GetMagickModule(), 971 ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); 962 ResourceLimitError,"MemoryAllocationFailed","`%s'", 963 magnitude_image->filename); 972 964 phase_source=(double *) RelinquishMagickMemory(phase_source); 973 965 return(MagickFalse); … … 1099 1091 } 1100 1092 1101 static MagickBooleanType InverseFourierTransformChannel(const Image *images, 1093 static MagickBooleanType InverseFourierTransformChannel( 1094 const Image *magnitude_image,const Image *phase_image, 1102 1095 const ChannelType channel,const MagickBooleanType modulus, 1103 1096 Image *fourier_image,ExceptionInfo *exception) … … 1119 1112 extent; 1120 1113 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; 1126 1121 fourier_info.width=(extent & 0x01) == 1 ? extent+1UL : extent; 1127 1122 } … … 1135 1130 { 1136 1131 (void) ThrowMagickException(exception,GetMagickModule(), 1137 ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); 1132 ResourceLimitError,"MemoryAllocationFailed","`%s'", 1133 magnitude_image->filename); 1138 1134 return(MagickFalse); 1139 1135 } … … 1143 1139 { 1144 1140 (void) ThrowMagickException(exception,GetMagickModule(), 1145 ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); 1141 ResourceLimitError,"MemoryAllocationFailed","`%s'", 1142 magnitude_image->filename); 1146 1143 magnitude=(double *) RelinquishMagickMemory(magnitude); 1147 1144 return(MagickFalse); … … 1152 1149 { 1153 1150 (void) ThrowMagickException(exception,GetMagickModule(), 1154 ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); 1151 ResourceLimitError,"MemoryAllocationFailed","`%s'", 1152 magnitude_image->filename); 1155 1153 phase=(double *) RelinquishMagickMemory(phase); 1156 1154 magnitude=(double *) RelinquishMagickMemory(magnitude); 1157 1155 return(MagickFalse); 1158 1156 } 1159 status=InverseFourier(&fourier_info,images,fourier,exception); 1157 status=InverseFourier(&fourier_info,magnitude_image,phase_image,fourier, 1158 exception); 1160 1159 if (status != MagickFalse) 1161 1160 status=InverseFourierTransform(&fourier_info,fourier,fourier_image, … … 1168 1167 #endif 1169 1168 1170 MagickExport Image *InverseFourierTransformImage(const Image *images, 1171 const MagickBooleanType modulus,ExceptionInfo *exception) 1169 MagickExport Image *InverseFourierTransformImage(const Image *magnitude_image, 1170 const Image *phase_image,const MagickBooleanType modulus, 1171 ExceptionInfo *exception) 1172 1172 { 1173 1173 Image 1174 1174 *fourier_image; 1175 1175 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 } 1176 1187 #if !defined(MAGICKCORE_FFTW_DELEGATE) 1177 1188 fourier_image=(Image *) NULL; … … 1179 1190 (void) ThrowMagickException(exception,GetMagickModule(), 1180 1191 MissingDelegateWarning,"DelegateLibrarySupportNotBuiltIn","`%s' (FFTW)", 1181 images->filename);1192 magnitude_image->filename); 1182 1193 #else 1183 1194 { 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); 1186 1197 if (fourier_image != (Image *) NULL) 1187 1198 { … … 1194 1205 1195 1206 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); 1199 1210 #if defined(MAGICKCORE_OPENMP_SUPPORT) 1200 1211 #pragma omp parallel for schedule(dynamic,4) shared(status) … … 1212 1223 if (is_gray != MagickFalse) 1213 1224 { 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); 1216 1227 break; 1217 1228 } 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); 1220 1231 break; 1221 1232 } … … 1223 1234 { 1224 1235 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); 1227 1238 break; 1228 1239 } … … 1230 1241 { 1231 1242 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); 1234 1245 break; 1235 1246 } 1236 1247 case 3: 1237 1248 { 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); 1241 1252 break; 1242 1253 } 1243 1254 case 4: 1244 1255 { 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); 1248 1259 break; 1249 1260 } -
ImageMagick/trunk/magick/fourier.h
r1 r584 26 26 *ForwardFourierTransformImage(const Image *,const MagickBooleanType, 27 27 ExceptionInfo *), 28 *InverseFourierTransformImage(const Image *,const MagickBooleanType,29 ExceptionInfo *);28 *InverseFourierTransformImage(const Image *,const Image *, 29 const MagickBooleanType,ExceptionInfo *); 30 30 31 31 #if defined(__cplusplus) || defined(c_plusplus) -
ImageMagick/trunk/wand/magick-image.c
r327 r584 6288 6288 % 6289 6289 % 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. 6295 6298 % 6296 6299 % o magnitude: if true, return as magnitude / phase pair otherwise a real / … … 6299 6302 */ 6300 6303 WandExport MagickBooleanType MagickInverseFourierTransformImage( 6301 MagickWand *wand,const MagickBooleanType magnitude) 6304 MagickWand *magnitude_wand,MagickWand *phase_wand, 6305 const MagickBooleanType magnitude) 6302 6306 { 6303 6307 Image 6304 6308 *inverse_image; 6305 6309 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); 6314 6326 if (inverse_image == (Image *) NULL) 6315 6327 return(MagickFalse); -
ImageMagick/trunk/wand/magick-image.h
r207 r584 194 194 const unsigned long,const unsigned long,const char *,const StorageType, 195 195 const void *), 196 MagickInverseFourierTransformImage(MagickWand *,const MagickBooleanType), 196 MagickInverseFourierTransformImage(MagickWand *,MagickWand *, 197 const MagickBooleanType), 197 198 MagickLabelImage(MagickWand *,const char *), 198 199 MagickLevelImage(MagickWand *,const double,const double,const double), -
ImageMagick/trunk/wand/mogrify.c
r562 r584 7704 7704 */ 7705 7705 (void) SyncImagesSettings(image_info,*images); 7706 fourier_image=InverseFourierTransformImage(*images, 7706 fourier_image=InverseFourierTransformImage(*images,(*images)->next, 7707 7707 *option == '-' ? MagickTrue : MagickFalse,exception); 7708 7708 if (fourier_image == (Image *) NULL)
