140 #define AddNoiseImageTag "AddNoise/Image" 161 #if defined(MAGICKCORE_OPENMP_SUPPORT) 169 assert(image != (
const Image *) NULL);
175 #if defined(MAGICKCORE_OPENCL_SUPPORT) 176 noise_image=AccelerateAddNoiseImage(image,noise_type,attenuate,exception);
177 if (noise_image != (
Image *) NULL)
181 if (noise_image == (
Image *) NULL)
182 return((
Image *) NULL);
186 return((
Image *) NULL);
196 #if defined(MAGICKCORE_OPENMP_SUPPORT) 198 #pragma omp parallel for schedule(static) shared(progress,status) \ 199 magick_number_threads(image,noise_image,image->rows,key == ~0UL) 201 for (y=0; y < (ssize_t) image->
rows; y++)
228 for (x=0; x < (ssize_t) image->
columns; x++)
261 #if defined(MAGICKCORE_OPENMP_SUPPORT) 309 #define BlueShiftImageTag "BlueShift/Image" 330 assert(image != (
const Image *) NULL);
337 if (shift_image == (
Image *) NULL)
338 return((
Image *) NULL);
342 return((
Image *) NULL);
351 #if defined(MAGICKCORE_OPENMP_SUPPORT) 352 #pragma omp parallel for schedule(static) shared(progress,status) \ 353 magick_number_threads(image,shift_image,image->rows,1) 355 for (y=0; y < (ssize_t) image->
rows; y++)
385 for (x=0; x < (ssize_t) image->
columns; x++)
400 pixel.
red=0.5*(pixel.
red+factor*quantum);
402 pixel.
blue=0.5*(pixel.
blue+factor*quantum);
417 #if defined(MAGICKCORE_OPENMP_SUPPORT) 474 assert(image != (
Image *) NULL);
480 edge_image=
EdgeImage(image,radius,exception);
481 if (edge_image == (
Image *) NULL)
482 return((
Image *) NULL);
484 charcoal_image=(
Image *) NULL;
487 charcoal_image=
BlurImage(edge_image,radius,sigma,exception);
489 if (charcoal_image == (
Image *) NULL)
490 return((
Image *) NULL);
498 return(charcoal_image);
537 #define ColorizeImageTag "Colorize/Image" 538 #define Colorize(pixel,blend_percentage,colorize) \ 539 (((pixel)*(100.0-(blend_percentage))+(colorize)*(blend_percentage))/100.0) 568 assert(image != (
const Image *) NULL);
575 if (colorize_image == (
Image *) NULL)
576 return((
Image *) NULL);
580 return((
Image *) NULL);
588 if (blend == (
const char *) NULL)
589 return(colorize_image);
592 blend_percentage.
red=geometry_info.
rho;
593 blend_percentage.
green=geometry_info.
rho;
594 blend_percentage.
blue=geometry_info.
rho;
595 blend_percentage.
black=geometry_info.
rho;
600 blend_percentage.
blue=geometry_info.
xi;
602 blend_percentage.
alpha=geometry_info.
psi;
606 blend_percentage.
black=geometry_info.
psi;
608 blend_percentage.
alpha=geometry_info.
chi;
616 #if defined(MAGICKCORE_OPENMP_SUPPORT) 617 #pragma omp parallel for schedule(static) shared(progress,status) \ 618 magick_number_threads(colorize_image,colorize_image,colorize_image->rows,1) 620 for (y=0; y < (ssize_t) colorize_image->
rows; y++)
640 for (x=0; x < (ssize_t) colorize_image->
columns; x++)
667 #if defined(MAGICKCORE_OPENMP_SUPPORT) 672 colorize_image->
rows);
680 return(colorize_image);
724 #define ColorMatrixImageTag "ColorMatrix/Image" 733 { 1.0, 0.0, 0.0, 0.0, 0.0, 0.0 },
734 { 0.0, 1.0, 0.0, 0.0, 0.0, 0.0 },
735 { 0.0, 0.0, 1.0, 0.0, 0.0, 0.0 },
736 { 0.0, 0.0, 0.0, 1.0, 0.0, 0.0 },
737 { 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 },
738 { 0.0, 0.0, 0.0, 0.0, 0.0, 1.0 }
761 assert(image != (
Image *) NULL);
768 for (v=0; v < (ssize_t) color_matrix->
height; v++)
769 for (u=0; u < (ssize_t) color_matrix->
width; u++)
771 if ((v < 6) && (u < 6))
772 ColorMatrix[v][u]=color_matrix->
values[i];
779 if (color_image == (
Image *) NULL)
780 return((
Image *) NULL);
784 return((
Image *) NULL);
793 " ColorMatrix image with color matrix:");
795 for (v=0; v < 6; v++)
800 for (u=0; u < 6; u++)
817 #if defined(MAGICKCORE_OPENMP_SUPPORT) 818 #pragma omp parallel for schedule(static) shared(progress,status) \ 819 magick_number_threads(image,color_image,image->rows,1) 821 for (y=0; y < (ssize_t) image->
rows; y++)
846 for (x=0; x < (ssize_t) image->
columns; x++)
855 height=color_matrix->
height > 6 ? 6UL : color_matrix->
height;
856 for (v=0; v < (ssize_t) height; v++)
861 sum=ColorMatrix[v][0]*
GetPixelRed(image,p)+ColorMatrix[v][1]*
870 case 0: pixel.
red=sum;
break;
871 case 1: pixel.
green=sum;
break;
872 case 2: pixel.
blue=sum;
break;
873 case 3: pixel.
black=sum;
break;
874 case 4: pixel.
alpha=sum;
break;
889 #if defined(MAGICKCORE_OPENMP_SUPPORT) 945 #define ImplodeImageTag "Implode/Image" 975 assert(image != (
Image *) NULL);
982 if (canvas_image == (
Image *) NULL)
983 return((
Image *) NULL);
988 if (implode_image == (
Image *) NULL)
991 return((
Image *) NULL);
997 return((
Image *) NULL);
1004 center.
x=0.5*canvas_image->
columns;
1005 center.
y=0.5*canvas_image->
rows;
1008 scale.
y=(double) canvas_image->
columns/(
double) canvas_image->
rows;
1012 scale.
x=(double) canvas_image->
rows/(
double) canvas_image->
columns;
1023 #if defined(MAGICKCORE_OPENMP_SUPPORT) 1024 #pragma omp parallel for schedule(static) shared(progress,status) \ 1025 magick_number_threads(canvas_image,implode_image,canvas_image->rows,1) 1027 for (y=0; y < (ssize_t) canvas_image->
rows; y++)
1055 delta.
y=scale.
y*(double) (y-center.
y);
1056 for (x=0; x < (ssize_t) canvas_image->
columns; x++)
1064 delta.
x=scale.
x*(double) (x-center.
x);
1065 distance=delta.
x*delta.
x+delta.
y*delta.
y;
1066 if (distance >= (radius*radius))
1088 factor=pow(sin(
MagickPI*sqrt((
double) distance)/radius/2),-amount);
1090 implode_image,method,(
double) (factor*delta.
x/scale.
x+center.
x),
1091 (
double) (factor*delta.
y/scale.
y+center.
y),q,exception);
1105 #if defined(MAGICKCORE_OPENMP_SUPPORT) 1110 canvas_image->
rows);
1121 return(implode_image);
1157 #define MorphImageTag "Morph/Image" 1185 assert(image != (
Image *) NULL);
1192 if (morph_images == (
Image *) NULL)
1193 return((
Image *) NULL);
1199 for (n=1; n < (ssize_t) number_frames; n++)
1202 if (morph_image == (
Image *) NULL)
1205 return((
Image *) NULL);
1229 for (n=0; n < (ssize_t) number_frames; n++)
1235 beta=(double) (n+1.0)/(double) (number_frames+1.0);
1240 if (morph_image == (
Image *) NULL)
1243 return((
Image *) NULL);
1249 return((
Image *) NULL);
1255 if (morph_image == (
Image *) NULL)
1258 return((
Image *) NULL);
1262 #if defined(MAGICKCORE_OPENMP_SUPPORT) 1263 #pragma omp parallel for schedule(static) shared(status) \ 1264 magick_number_threads(morph_image,morph_image,morph_image->rows,1) 1266 for (y=0; y < (ssize_t) morph_images->
rows; y++)
1291 for (x=0; x < (ssize_t) morph_images->
columns; x++)
1323 if (n < (ssize_t) number_frames)
1329 if (morph_image == (
Image *) NULL)
1332 return((
Image *) NULL);
1351 return((
Image *) NULL);
1391 const double pixel,
const double noise)
1442 local_info=(*segment);
1443 local_info.
x2=(double) x_mid;
1444 local_info.
y2=(double) y_mid;
1446 &local_info,attenuate,depth,exception);
1447 local_info=(*segment);
1448 local_info.
y1=(double) y_mid;
1449 local_info.
x2=(double) x_mid;
1451 &local_info,attenuate,depth,exception);
1452 local_info=(*segment);
1453 local_info.
x1=(double) x_mid;
1454 local_info.
y2=(double) y_mid;
1456 &local_info,attenuate,depth,exception);
1457 local_info=(*segment);
1458 local_info.
x1=(double) x_mid;
1459 local_info.
y1=(double) y_mid;
1461 &local_info,attenuate,depth,exception);
1484 segment->y1-0.5)),1,1,exception);
1486 segment->y2-0.5)),1,1,exception);
1488 if ((u == (
const Quantum *) NULL) || (v == (
const Quantum *) NULL) ||
1507 segment->y1-0.5)),1,1,exception);
1509 segment->y2-0.5)),1,1,exception);
1511 if ((u == (
const Quantum *) NULL) || (v == (
const Quantum *) NULL) ||
1536 segment->x1-0.5)),y,1,1,exception);
1538 segment->x2-0.5)),y,1,1,exception);
1540 if ((u == (
const Quantum *) NULL) || (v == (
const Quantum *) NULL) ||
1560 segment->x1-0.5)),y,1,1,exception);
1562 segment->x2-0.5)),y,1,1,exception);
1564 if ((u == (
const Quantum *) NULL) || (v == (
const Quantum *) NULL) ||
1591 if ((u == (
const Quantum *) NULL) || (v == (
const Quantum *) NULL) ||
1604 if ((fabs(segment->x2-segment->x1) < 3.0) &&
1605 (fabs(segment->y2-segment->y1) < 3.0))
1611 const SegmentInfo *segment,
size_t attenuate,
size_t depth,
1625 assert(image != (
Image *) NULL);
1638 attenuate,depth,exception);
1702 assert(image != (
Image *) NULL);
1709 image->
rows)/25.0,10.0);
1710 height=image->
rows+2*quantum;
1711 caption_image=(
Image *) NULL;
1712 if (caption != (
const char *) NULL)
1721 if (caption_image == (
Image *) NULL)
1722 return((
Image *) NULL);
1725 if (text != (
char *) NULL)
1745 &metrics,&text,exception);
1747 ((count+1)*(metrics.
ascent-metrics.
descent)+0.5),exception);
1760 (void)
AnnotateImage(caption_image,annotate_info,exception);
1761 height+=caption_image->
rows;
1769 if (picture_image == (
Image *) NULL)
1771 if (caption_image != (
Image *) NULL)
1773 return((
Image *) NULL);
1779 if (caption_image != (
Image *) NULL)
1782 MagickTrue,quantum,(ssize_t) (image->
rows+3*quantum/2),exception);
1788 rotate_image=
RotateImage(picture_image,90.0,exception);
1790 if (rotate_image == (
Image *) NULL)
1791 return((
Image *) NULL);
1792 picture_image=rotate_image;
1793 bend_image=
WaveImage(picture_image,0.01*picture_image->
rows,2.0*
1794 picture_image->
columns,method,exception);
1796 if (bend_image == (
Image *) NULL)
1797 return((
Image *) NULL);
1798 picture_image=bend_image;
1799 rotate_image=
RotateImage(picture_image,-90.0,exception);
1801 if (rotate_image == (
Image *) NULL)
1802 return((
Image *) NULL);
1803 picture_image=rotate_image;
1805 polaroid_image=
ShadowImage(picture_image,80.0,2.0,quantum/3,quantum/3,
1807 if (polaroid_image == (
Image *) NULL)
1810 return(picture_image);
1812 flop_image=
FlopImage(polaroid_image,exception);
1814 if (flop_image == (
Image *) NULL)
1817 return(picture_image);
1819 polaroid_image=flop_image;
1825 rotate_image=
RotateImage(polaroid_image,angle,exception);
1827 if (rotate_image == (
Image *) NULL)
1828 return((
Image *) NULL);
1829 polaroid_image=rotate_image;
1830 trim_image=
TrimImage(polaroid_image,exception);
1832 if (trim_image == (
Image *) NULL)
1833 return((
Image *) NULL);
1834 polaroid_image=trim_image;
1835 return(polaroid_image);
1871 #define SepiaToneImageTag "SepiaTone/Image" 1892 assert(image != (
const Image *) NULL);
1899 if (sepia_image == (
Image *) NULL)
1900 return((
Image *) NULL);
1904 return((
Image *) NULL);
1913 #if defined(MAGICKCORE_OPENMP_SUPPORT) 1914 #pragma omp parallel for schedule(static) shared(progress,status) \ 1915 magick_number_threads(image,sepia_image,image->rows,1) 1917 for (y=0; y < (ssize_t) image->
rows; y++)
1938 for (x=0; x < (ssize_t) image->
columns; x++)
1945 tone=intensity > threshold ? (double)
QuantumRange : intensity+
1948 tone=intensity > (7.0*threshold/6.0) ? (double)
QuantumRange :
1951 tone=intensity < (threshold/6.0) ? 0 : intensity-threshold/6.0;
1969 #if defined(MAGICKCORE_OPENMP_SUPPORT) 1984 return(sepia_image);
2022 const double sigma,
const ssize_t x_offset,
const ssize_t y_offset,
2025 #define ShadowImageTag "Shadow/Image" 2050 assert(image != (
Image *) NULL);
2057 if (clone_image == (
Image *) NULL)
2058 return((
Image *) NULL);
2063 border_info.
width=(size_t) floor(2.0*sigma+0.5);
2064 border_info.
height=(size_t) floor(2.0*sigma+0.5);
2072 if (border_image == (
Image *) NULL)
2073 return((
Image *) NULL);
2083 for (y=0; y < (ssize_t) border_image->
rows; y++)
2100 for (x=0; x < (ssize_t) border_image->
columns; x++)
2114 return((
Image *) NULL);
2117 shadow_image=
BlurImage(border_image,0.0,sigma,exception);
2119 if (shadow_image == (
Image *) NULL)
2120 return((
Image *) NULL);
2128 shadow_image->
page.
x+=x_offset-(ssize_t) border_info.
width;
2129 shadow_image->
page.
y+=y_offset-(ssize_t) border_info.
height;
2130 return(shadow_image);
2170 const double sigma,
const double angle,
ExceptionInfo *exception)
2191 #if defined(MAGICKCORE_OPENMP_SUPPORT) 2201 if (random_image == (
Image *) NULL)
2202 return((
Image *) NULL);
2206 #if defined(MAGICKCORE_OPENMP_SUPPORT) 2208 #pragma omp parallel for schedule(static) shared(status) \ 2209 magick_number_threads(random_image,random_image,random_image->rows,key == ~0UL) 2211 for (y=0; y < (ssize_t) random_image->
rows; y++)
2231 for (x=0; x < (ssize_t) random_image->
columns; x++)
2258 return(random_image);
2260 blur_image=
MotionBlurImage(random_image,radius,sigma,angle,exception);
2262 if (blur_image == (
Image *) NULL)
2263 return((
Image *) NULL);
2264 dodge_image=
EdgeImage(blur_image,radius,exception);
2266 if (dodge_image == (
Image *) NULL)
2267 return((
Image *) NULL);
2274 status=
TransformImage(&dodge_image,(
char *) NULL,
"50%",exception);
2276 if (sketch_image == (
Image *) NULL)
2279 return((
Image *) NULL);
2285 if (blend_image == (
Image *) NULL)
2288 return((
Image *) NULL);
2296 return(sketch_image);
2332 #define SolarizeImageTag "Solarize/Image" 2346 assert(image != (
Image *) NULL);
2360 for (i=0; i < (ssize_t) image->
colors; i++)
2377 #if defined(MAGICKCORE_OPENMP_SUPPORT) 2378 #pragma omp parallel for schedule(static) shared(progress,status) \ 2379 magick_number_threads(image,image,image->rows,1) 2381 for (y=0; y < (ssize_t) image->
rows; y++)
2397 for (x=0; x < (ssize_t) image->
columns; x++)
2408 if ((
double) q[i] > threshold)
2420 #if defined(MAGICKCORE_OPENMP_SUPPORT) 2465 #define GetBit(alpha,i) ((((size_t) (alpha) >> (size_t) (i)) & 0x01) != 0) 2466 #define SetBit(alpha,i,set) (Quantum) ((set) != 0 ? (size_t) (alpha) \ 2467 | (one << (size_t) (i)) : (size_t) (alpha) & ~(one << (size_t) (i))) 2468 #define SteganoImageTag "Stegano/Image" 2505 assert(image != (
const Image *) NULL);
2509 assert(watermark != (
const Image *) NULL);
2515 if (stegano_image == (
Image *) NULL)
2516 return((
Image *) NULL);
2521 return((
Image *) NULL);
2529 depth=stegano_image->
depth;
2534 for (i=(ssize_t) depth-1; (i >= 0) && (j < (ssize_t) depth); i--)
2536 for (y=0; (y < (ssize_t) watermark->
rows) && (j < (ssize_t) depth); y++)
2538 for (x=0; (x < (ssize_t) watermark->
columns) && (j < (ssize_t) depth); x++)
2545 offset=k/(ssize_t) stegano_image->
columns;
2546 if (offset >= (ssize_t) stegano_image->
rows)
2580 if (k == (ssize_t) (stegano_image->
columns*stegano_image->
columns))
2582 if (k == stegano_image->
offset)
2601 return(stegano_image);
2650 const Image *right_image,
const ssize_t x_offset,
const ssize_t y_offset,
2653 #define StereoImageTag "Stereo/Image" 2667 assert(left_image != (
const Image *) NULL);
2672 assert(right_image != (
const Image *) NULL);
2678 (left_image->
rows != right_image->
rows))
2685 if (stereo_image == (
Image *) NULL)
2686 return((
Image *) NULL);
2690 return((
Image *) NULL);
2697 for (y=0; y < (ssize_t) stereo_image->
rows; y++)
2716 for (x=0; x < (ssize_t) stereo_image->
columns; x++)
2736 stereo_image->
rows);
2743 return(stereo_image);
2780 #define SwirlImageTag "Swirl/Image" 2810 assert(image != (
const Image *) NULL);
2817 if (canvas_image == (
Image *) NULL)
2818 return((
Image *) NULL);
2820 if (swirl_image == (
Image *) NULL)
2823 return((
Image *) NULL);
2829 return((
Image *) NULL);
2836 center.
x=(double) canvas_image->
columns/2.0;
2837 center.
y=(
double) canvas_image->
rows/2.0;
2842 scale.
y=(double) canvas_image->
columns/(
double) canvas_image->
rows;
2845 scale.
x=(double) canvas_image->
rows/(
double) canvas_image->
columns;
2855 #if defined(MAGICKCORE_OPENMP_SUPPORT) 2856 #pragma omp parallel for schedule(static) shared(progress,status) \ 2857 magick_number_threads(canvas_image,swirl_image,canvas_image->rows,1) 2859 for (y=0; y < (ssize_t) canvas_image->
rows; y++)
2887 delta.
y=scale.
y*(double) (y-center.
y);
2888 for (x=0; x < (ssize_t) canvas_image->
columns; x++)
2893 delta.
x=scale.
x*(double) (x-center.
x);
2894 distance=delta.
x*delta.
x+delta.
y*delta.
y;
2895 if (distance >= (radius*radius))
2922 factor=1.0-sqrt((
double) distance)/radius;
2923 sine=sin((
double) (degrees*factor*factor));
2924 cosine=cos((
double) (degrees*factor*factor));
2926 swirl_image,method,((cosine*delta.
x-sine*delta.
y)/scale.
x+center.
x),
2927 (
double) ((sine*delta.
x+cosine*delta.
y)/scale.
y+center.
y),q,
2942 #if defined(MAGICKCORE_OPENMP_SUPPORT) 2947 canvas_image->
rows);
2958 return(swirl_image);
2995 #define TintImageTag "Tint/Image" 3028 assert(image != (
const Image *) NULL);
3035 if (tint_image == (
Image *) NULL)
3036 return((
Image *) NULL);
3040 return((
Image *) NULL);
3045 if (blend == (
const char *) NULL)
3052 color_vector.
red=geometry_info.
rho;
3053 color_vector.
green=geometry_info.
rho;
3054 color_vector.
blue=geometry_info.
rho;
3059 color_vector.
blue=geometry_info.
xi;
3061 color_vector.
alpha=geometry_info.
psi;
3064 color_vector.
black=geometry_info.
rho;
3066 color_vector.
black=geometry_info.
psi;
3068 color_vector.
alpha=geometry_info.
chi;
3071 color_vector.
red=(double) (color_vector.
red*tint->
red/100.0-intensity);
3072 color_vector.
green=(double) (color_vector.
green*tint->
green/100.0-intensity);
3073 color_vector.
blue=(double) (color_vector.
blue*tint->
blue/100.0-intensity);
3074 color_vector.
black=(double) (color_vector.
black*tint->
black/100.0-intensity);
3075 color_vector.
alpha=(double) (color_vector.
alpha*tint->
alpha/100.0-intensity);
3083 #if defined(MAGICKCORE_OPENMP_SUPPORT) 3084 #pragma omp parallel for schedule(static) shared(progress,status) \ 3085 magick_number_threads(image,tint_image,image->rows,1) 3087 for (y=0; y < (ssize_t) image->
rows; y++)
3108 for (x=0; x < (ssize_t) image->
columns; x++)
3119 (1.0-(4.0*(weight*weight)));
3122 (1.0-(4.0*(weight*weight)));
3125 (1.0-(4.0*(weight*weight)));
3128 (1.0-(4.0*(weight*weight)));
3141 #if defined(MAGICKCORE_OPENMP_SUPPORT) 3190 const double sigma,
const ssize_t x,
const ssize_t y,
ExceptionInfo *exception)
3204 assert(image != (
Image *) NULL);
3211 if (canvas == (
Image *) NULL)
3212 return((
Image *) NULL);
3216 return((
Image *) NULL);
3221 if (oval_image == (
Image *) NULL)
3224 return((
Image *) NULL);
3238 (void)
DrawImage(oval_image,draw_info,exception);
3240 blur_image=
BlurImage(oval_image,radius,sigma,exception);
3242 if (blur_image == (
Image *) NULL)
3245 return((
Image *) NULL);
3253 if (vignette_image != (
Image *) NULL)
3255 return(vignette_image);
3295 #define WaveImageTag "Wave/Image" 3323 assert(image != (
Image *) NULL);
3330 if (canvas_image == (
Image *) NULL)
3331 return((
Image *) NULL);
3337 if (wave_image == (
Image *) NULL)
3340 return((
Image *) NULL);
3346 return((
Image *) NULL);
3353 if (sine_map == (
float *) NULL)
3359 for (i=0; i < (ssize_t) wave_image->
columns; i++)
3360 sine_map[i]=(float) fabs(amplitude)+amplitude*sin((
double)
3371 #if defined(MAGICKCORE_OPENMP_SUPPORT) 3372 #pragma omp parallel for schedule(static) shared(progress,status) \ 3373 magick_number_threads(canvas_image,wave_image,wave_image->rows,1) 3375 for (y=0; y < (ssize_t) wave_image->
rows; y++)
3397 for (x=0; x < (ssize_t) wave_image->
columns; x++)
3400 wave_image,method,(
double) x,(
double) (y-sine_map[x]),q,exception);
3413 #if defined(MAGICKCORE_OPENMP_SUPPORT) 3418 canvas_image->
rows);
3468 const size_t stride,
const size_t extent,
const size_t scale,
float *kernel)
3479 q=pixels+scale*stride;
3480 r=pixels+scale*stride;
3481 for (i=0; i < (ssize_t) scale; i++)
3483 kernel[i]=0.25f*(*p+(*p)+(*q)+(*r));
3488 for ( ; i < (ssize_t) (extent-scale); i++)
3490 kernel[i]=0.25f*(2.0f*(*p)+*(p-scale*stride)+*(p+scale*stride));
3494 r=pixels+stride*(extent-2);
3495 for ( ; i < (ssize_t) extent; i++)
3497 kernel[i]=0.25f*(*p+(*p)+(*q)+(*r));
3505 const double threshold,
const double softness,
ExceptionInfo *exception)
3531 noise_levels[] = { 0.8002f, 0.2735f, 0.1202f, 0.0585f, 0.0291f, 0.0152f,
3537 assert(image != (
const Image *) NULL);
3543 #if defined(MAGICKCORE_OPENCL_SUPPORT) 3544 noise_image=AccelerateWaveletDenoiseImage(image,threshold,exception);
3545 if (noise_image != (
Image *) NULL)
3546 return(noise_image);
3549 if (noise_image == (
Image *) NULL)
3550 return((
Image *) NULL);
3554 return((
Image *) NULL);
3562 if ((pixels_info == (
MemoryInfo *) NULL) || (kernel == (
float *) NULL))
3564 if (kernel != (
float *) NULL)
3608 for (y=0; y < (ssize_t) image->
rows; y++)
3617 if (p == (
const Quantum *) NULL)
3622 for (x=0; x < (ssize_t) image->
columns; x++)
3624 pixels[i++]=(float) p[channel];
3634 for (level=0; level < 5; level++)
3643 low_pass=(size_t) (number_pixels*((level & 0x01)+1));
3644 #if defined(MAGICKCORE_OPENMP_SUPPORT) 3645 #pragma omp parallel for schedule(static,1) \ 3646 magick_number_threads(image,image,image->rows,1) 3648 for (y=0; y < (ssize_t) image->
rows; y++)
3664 for (x=0; x < (ssize_t) image->
columns; x++)
3667 #if defined(MAGICKCORE_OPENMP_SUPPORT) 3668 #pragma omp parallel for schedule(static,1) \ 3669 magick_number_threads(image,image,image->columns,1) 3671 for (x=0; x < (ssize_t) image->
columns; x++)
3683 p=kernel+
id*image->
rows;
3684 q=pixels+x+low_pass;
3686 for (y=0; y < (ssize_t) image->
rows; y++)
3696 magnitude=threshold*noise_levels[level];
3697 for (i=0; i < (ssize_t) number_pixels; ++i)
3699 pixels[high_pass+i]-=pixels[low_pass+i];
3700 if (pixels[high_pass+i] < -magnitude)
3701 pixels[high_pass+i]+=magnitude-softness*magnitude;
3703 if (pixels[high_pass+i] > magnitude)
3704 pixels[high_pass+i]-=magnitude-softness*magnitude;
3706 pixels[high_pass+i]*=softness;
3708 pixels[i]+=pixels[high_pass+i];
3716 for (y=0; y < (ssize_t) image->
rows; y++)
3738 for (x=0; x < (ssize_t) image->
columns; x++)
3769 return(noise_image);
MagickExport Image * ResizeImage(const Image *image, const size_t columns, const size_t rows, const FilterType filter, ExceptionInfo *exception)
MagickExport Image * BlurImage(const Image *image, const double radius, const double sigma, ExceptionInfo *exception)
#define ColorMatrixImageTag
MagickDoubleType MagickRealType
MagickExport MagickBooleanType NegateImage(Image *image, const MagickBooleanType grayscale, ExceptionInfo *exception)
PixelIntensityMethod intensity
MagickExport CacheView * DestroyCacheView(CacheView *cache_view)
MagickExport Image * MotionBlurImage(const Image *image, const double radius, const double sigma, const double angle, ExceptionInfo *exception)
MagickExport Image * TintImage(const Image *image, const char *blend, const PixelInfo *tint, ExceptionInfo *exception)
static ssize_t GetPixelChannelOffset(const Image *magick_restrict image, const PixelChannel channel)
MagickExport MemoryInfo * RelinquishVirtualMemory(MemoryInfo *memory_info)
MagickProgressMonitor progress_monitor
MagickExport MagickBooleanType SyncImage(Image *image, ExceptionInfo *exception)
static Quantum GetPixelAlpha(const Image *magick_restrict image, const Quantum *magick_restrict pixel)
MagickExport MagickBooleanType TransformImageColorspace(Image *image, const ColorspaceType colorspace, ExceptionInfo *exception)
MagickExport Image * WaveletDenoiseImage(const Image *image, const double threshold, const double softness, ExceptionInfo *exception)
static PixelTrait GetPixelAlphaTraits(const Image *magick_restrict image)
static Quantum GetPixelRed(const Image *magick_restrict image, const Quantum *magick_restrict pixel)
MagickExport Image * ColorMatrixImage(const Image *image, const KernelInfo *color_matrix, ExceptionInfo *exception)
MagickExport MemoryInfo * AcquireVirtualMemory(const size_t count, const size_t quantum)
static size_t GetOpenMPMaximumThreads(void)
MagickExport Image * PolaroidImage(const Image *image, const DrawInfo *draw_info, const char *caption, const double angle, const PixelInterpolateMethod method, ExceptionInfo *exception)
MagickExport MagickBooleanType GetOneCacheViewVirtualPixelInfo(const CacheView *cache_view, const ssize_t x, const ssize_t y, PixelInfo *pixel, ExceptionInfo *exception)
MagickExport MagickBooleanType SetImageArtifact(Image *image, const char *artifact, const char *value)
MagickPrivate double GenerateDifferentialNoise(RandomInfo *, const Quantum, const NoiseType, const double)
static Quantum GetPixelChannel(const Image *magick_restrict image, const PixelChannel channel, const Quantum *magick_restrict pixel)
static void HatTransform(const float *magick_restrict pixels, const size_t stride, const size_t extent, const size_t scale, float *kernel)
MagickExport MagickBooleanType InterpolatePixelChannels(const Image *magick_restrict source, const CacheView_ *source_view, const Image *magick_restrict destination, const PixelInterpolateMethod method, const double x, const double y, Quantum *pixel, ExceptionInfo *exception)
MagickExport MagickBooleanType SetImageAlpha(Image *image, const Quantum alpha, ExceptionInfo *exception)
static RandomInfo ** DestroyRandomInfoThreadSet(RandomInfo **random_info)
static PixelTrait GetPixelChannelTraits(const Image *magick_restrict image, const PixelChannel channel)
MagickExport Image * SepiaToneImage(const Image *image, const double threshold, ExceptionInfo *exception)
MagickExport ssize_t FormatLocaleString(char *magick_restrict string, const size_t length, const char *magick_restrict format,...)
static void SetPixelViaPixelInfo(const Image *magick_restrict image, const PixelInfo *magick_restrict pixel_info, Quantum *magick_restrict pixel)
static MagickBooleanType IsGrayColorspace(const ColorspaceType colorspace)
MagickExport Image * MergeImageLayers(Image *image, const LayerMethod method, ExceptionInfo *exception)
static Quantum PlasmaPixel(RandomInfo *magick_restrict random_info, const double pixel, const double noise)
#define MAGICKCORE_QUANTUM_DEPTH
MagickExport const Quantum * GetCacheViewVirtualPixels(const CacheView *cache_view, const ssize_t x, const ssize_t y, const size_t columns, const size_t rows, ExceptionInfo *exception)
MagickExport MagickBooleanType GrayscaleImage(Image *image, const PixelIntensityMethod method, ExceptionInfo *exception)
static RandomInfo ** AcquireRandomInfoThreadSet(void)
MagickExport MagickBooleanType PlasmaImage(Image *image, const SegmentInfo *segment, size_t attenuate, size_t depth, ExceptionInfo *exception)
MagickExport MagickBooleanType CompositeImage(Image *image, const Image *composite, const CompositeOperator compose, const MagickBooleanType clip_to_self, const ssize_t x_offset, const ssize_t y_offset, ExceptionInfo *exception)
MagickExport MagickBooleanType AcquireMagickResource(const ResourceType type, const MagickSizeType size)
MagickExport unsigned long GetRandomSecretKey(const RandomInfo *random_info)
MagickExport void GetPixelInfo(const Image *image, PixelInfo *pixel)
static Quantum ClampToQuantum(const MagickRealType quantum)
MagickExport RandomInfo * DestroyRandomInfo(RandomInfo *random_info)
MagickExport Image * ImplodeImage(const Image *image, const double amount, const PixelInterpolateMethod method, ExceptionInfo *exception)
MagickExport MagickBooleanType ContrastImage(Image *image, const MagickBooleanType sharpen, ExceptionInfo *exception)
#define MagickCoreSignature
MagickExport Quantum * GetCacheViewAuthenticPixels(CacheView *cache_view, const ssize_t x, const ssize_t y, const size_t columns, const size_t rows, ExceptionInfo *exception)
MagickExport ssize_t FormatMagickCaption(Image *image, DrawInfo *draw_info, const MagickBooleanType split, TypeMetric *metrics, char **caption, ExceptionInfo *exception)
MagickExport Image * GetFirstImageInList(const Image *images)
#define BlueShiftImageTag
MagickExport MagickBooleanType SetImageAlphaChannel(Image *image, const AlphaChannelOption alpha_type, ExceptionInfo *exception)
unsigned int MagickStatusType
MagickExport char * AcquireString(const char *source)
MagickExport MagickBooleanType AnnotateImage(Image *image, const DrawInfo *draw_info, ExceptionInfo *exception)
MagickExport const Quantum * GetVirtualPixels(const Image *image, const ssize_t x, const ssize_t y, const size_t columns, const size_t rows, ExceptionInfo *exception)
MagickExport MagickBooleanType NormalizeImage(Image *image, ExceptionInfo *exception)
MagickExport void * AcquireQuantumMemory(const size_t count, const size_t quantum)
MagickExport Image * AddNoiseImage(const Image *image, const NoiseType noise_type, const double attenuate, ExceptionInfo *exception)
static double DegreesToRadians(const double degrees)
static int GetOpenMPThreadId(void)
MagickExport Image * VignetteImage(const Image *image, const double radius, const double sigma, const ssize_t x, const ssize_t y, ExceptionInfo *exception)
MagickExport Image * ShadowImage(const Image *image, const double alpha, const double sigma, const ssize_t x_offset, const ssize_t y_offset, ExceptionInfo *exception)
static Quantum GetPixelGreen(const Image *magick_restrict image, const Quantum *magick_restrict pixel)
static void GetPixelInfoPixel(const Image *magick_restrict image, const Quantum *magick_restrict pixel, PixelInfo *magick_restrict pixel_info)
MagickExport MagickBooleanType DrawImage(Image *image, const DrawInfo *draw_info, ExceptionInfo *exception)
MagickExport ChannelType SetPixelChannelMask(Image *image, const ChannelType channel_mask)
static Quantum GetPixelBlack(const Image *magick_restrict image, const Quantum *magick_restrict pixel)
MagickExport ChannelType SetImageChannelMask(Image *image, const ChannelType channel_mask)
MagickExport Quantum * QueueCacheViewAuthenticPixels(CacheView *cache_view, const ssize_t x, const ssize_t y, const size_t columns, const size_t rows, ExceptionInfo *exception)
MagickExport MagickRealType GetPixelInfoIntensity(const Image *magick_restrict image, const PixelInfo *magick_restrict pixel)
MagickExport Image * SketchImage(const Image *image, const double radius, const double sigma, const double angle, ExceptionInfo *exception)
MagickExport VirtualPixelMethod SetImageVirtualPixelMethod(Image *image, const VirtualPixelMethod virtual_pixel_method, ExceptionInfo *exception)
MagickExport MagickBooleanType LogMagickEvent(const LogEventType type, const char *module, const char *function, const size_t line, const char *format,...)
MagickExport Image * RotateImage(const Image *image, const double degrees, ExceptionInfo *exception)
MagickExport MagickBooleanType SetImageBackgroundColor(Image *image, ExceptionInfo *exception)
MagickExport RandomInfo * AcquireRandomInfo(void)
MagickBooleanType(* MagickProgressMonitor)(const char *, const MagickOffsetType, const MagickSizeType, void *)
MagickExport DrawInfo * CloneDrawInfo(const ImageInfo *image_info, const DrawInfo *draw_info)
MagickExport Image * GetLastImageInList(const Image *images)
MagickExport Image * SwirlImage(const Image *image, double degrees, const PixelInterpolateMethod method, ExceptionInfo *exception)
MagickExport MagickBooleanType QueryColorCompliance(const char *name, const ComplianceType compliance, PixelInfo *color, ExceptionInfo *exception)
static void SetPixelBlue(const Image *magick_restrict image, const Quantum blue, Quantum *magick_restrict pixel)
MagickExport MagickBooleanType SetImageStorageClass(Image *image, const ClassType storage_class, ExceptionInfo *exception)
#define SetBit(alpha, i, set)
MagickExport Image * DestroyImageList(Image *images)
#define Colorize(pixel, blend_percentage, colorize)
MagickExport MagickBooleanType SetImageExtent(Image *image, const size_t columns, const size_t rows, ExceptionInfo *exception)
MagickExport Image * StereoAnaglyphImage(const Image *left_image, const Image *right_image, const ssize_t x_offset, const ssize_t y_offset, ExceptionInfo *exception)
static size_t GetPixelChannels(const Image *magick_restrict image)
static ssize_t CastDoubleToLong(const double value)
char filename[MagickPathExtent]
#define GetMagickModule()
MagickExport Image * MorphImages(const Image *image, const size_t number_frames, ExceptionInfo *exception)
static MagickBooleanType PlasmaImageProxy(Image *image, CacheView *image_view, CacheView *u_view, CacheView *v_view, RandomInfo *magick_restrict random_info, const SegmentInfo *magick_restrict segment, size_t attenuate, size_t depth, ExceptionInfo *exception)
#define ThrowImageException(severity, tag)
static PixelChannel GetPixelChannelChannel(const Image *magick_restrict image, const ssize_t offset)
static MagickRealType GetPixelInfoChannel(const PixelInfo *magick_restrict pixel_info, const PixelChannel channel)
MagickExport CacheView * AcquireVirtualCacheView(const Image *image, ExceptionInfo *exception)
MagickExport MagickBooleanType SetCacheViewVirtualPixelMethod(CacheView *magick_restrict cache_view, const VirtualPixelMethod virtual_pixel_method)
MagickExport char * InterpretImageProperties(ImageInfo *image_info, Image *image, const char *embed_text, ExceptionInfo *exception)
MagickExport MagickBooleanType SyncAuthenticPixels(Image *image, ExceptionInfo *exception)
static MagickBooleanType IsPixelInfoGray(const PixelInfo *magick_restrict pixel)
MagickExport Image * BorderImage(const Image *image, const RectangleInfo *border_info, const CompositeOperator compose, ExceptionInfo *exception)
MagickExport MagickBooleanType SetImageColorspace(Image *image, const ColorspaceType colorspace, ExceptionInfo *exception)
MagickExport Image * SteganoImage(const Image *image, const Image *watermark, ExceptionInfo *exception)
MagickExport DrawInfo * DestroyDrawInfo(DrawInfo *draw_info)
MagickExport Image * GetNextImageInList(const Image *images)
MagickExport char * DestroyString(char *string)
MagickExport Quantum * QueueAuthenticPixels(Image *image, const ssize_t x, const ssize_t y, const size_t columns, const size_t rows, ExceptionInfo *exception)
MagickExport double GetPseudoRandomValue(RandomInfo *magick_restrict random_info)
MagickExport MagickStatusType ParseGeometry(const char *geometry, GeometryInfo *geometry_info)
static void SetPixelChannel(const Image *magick_restrict image, const PixelChannel channel, const Quantum quantum, Quantum *magick_restrict pixel)
MagickExport void AppendImageToList(Image **images, const Image *append)
MagickExport Image * CharcoalImage(const Image *image, const double radius, const double sigma, ExceptionInfo *exception)
static void SetPixelAlpha(const Image *magick_restrict image, const Quantum alpha, Quantum *magick_restrict pixel)
MagickExport MagickBooleanType ConcatenateString(char **magick_restrict destination, const char *magick_restrict source)
static RandomInfo * random_info
MagickExport void * RelinquishMagickMemory(void *memory)
MagickExport Image * WaveImage(const Image *image, const double amplitude, const double wave_length, const PixelInterpolateMethod method, ExceptionInfo *exception)
MagickExport MagickBooleanType ClampImage(Image *image, ExceptionInfo *exception)
MagickExport Image * StereoImage(const Image *left_image, const Image *right_image, ExceptionInfo *exception)
MagickExport char * CloneString(char **destination, const char *source)
#define SepiaToneImageTag
static void SetPixelRed(const Image *magick_restrict image, const Quantum red, Quantum *magick_restrict pixel)
MagickExport Image * BlueShiftImage(const Image *image, const double factor, ExceptionInfo *exception)
MagickExport MagickBooleanType SyncCacheViewAuthenticPixels(CacheView *magick_restrict cache_view, ExceptionInfo *exception)
MagickExport MagickBooleanType SolarizeImage(Image *image, const double threshold, ExceptionInfo *exception)
MagickExport Image * ColorizeImage(const Image *image, const char *blend, const PixelInfo *colorize, ExceptionInfo *exception)
MagickExport CacheView * AcquireAuthenticCacheView(const Image *image, ExceptionInfo *exception)
ColorspaceType colorspace
MagickExport Image * EdgeImage(const Image *image, const double radius, ExceptionInfo *exception)
static Quantum GetPixelBlue(const Image *magick_restrict image, const Quantum *magick_restrict pixel)
MagickExport void * GetVirtualMemoryBlob(const MemoryInfo *memory_info)
MagickExport MagickRealType GetPixelIntensity(const Image *magick_restrict image, const Quantum *magick_restrict pixel)
PixelInfo background_color
MagickExport size_t GetImageListLength(const Image *images)
MagickExport Image * DestroyImage(Image *image)
MagickExport Image * CloneImage(const Image *image, const size_t columns, const size_t rows, const MagickBooleanType detach, ExceptionInfo *exception)
ColorspaceType colorspace
MagickExport MagickBooleanType SetImageProgress(const Image *image, const char *tag, const MagickOffsetType offset, const MagickSizeType extent)
static void SetPixelGreen(const Image *magick_restrict image, const Quantum green, Quantum *magick_restrict pixel)