18using namespace Magick;
20static void Usage (
char **argv )
22 cout <<
"Usage: " << argv[0]
23 <<
" [-density resolution] [-filter algorithm] [-geometry geometry]"
24 <<
" [-resample resolution] input_file output_file" << endl
25 <<
" algorithm - bessel blackman box catrom cubic gaussian hamming hanning" << endl
26 <<
" hermite lanczos mitchell point quadratic sample scale sinc triangle" << endl;
30static void ParseError (
int position,
char **argv)
32 cout <<
"Argument \"" << argv[position] <<
"\" at position" << position
33 <<
"incorrect" << endl;
37int main(
int argc,
char **argv)
40 InitializeMagick(*argv);
54 Magick::FilterType filter(LanczosFilter);
57 ResizeAlgorithm resize_algorithm=Zoom;
60 while ((argv_index < argc - 2) && (*argv[argv_index] ==
'-'))
62 std::string command(argv[argv_index]);
63 if (command.compare(
"-density") == 0)
71 ParseError(argv_index,argv);
76 else if (command.compare(
"-filter") == 0)
79 std::string algorithm(argv[argv_index]);
80 if (algorithm.compare(
"point") == 0)
82 else if (algorithm.compare(
"box") == 0)
84 else if (algorithm.compare(
"triangle") == 0)
85 filter=TriangleFilter;
86 else if (algorithm.compare(
"hermite") == 0)
88 else if (algorithm.compare(
"hanning") == 0)
90 else if (algorithm.compare(
"hamming") == 0)
92 else if (algorithm.compare(
"blackman") == 0)
93 filter=BlackmanFilter;
94 else if (algorithm.compare(
"gaussian") == 0)
95 filter=GaussianFilter;
96 else if (algorithm.compare(
"quadratic") == 0)
97 filter=QuadraticFilter;
98 else if (algorithm.compare(
"cubic") == 0)
100 else if (algorithm.compare(
"catrom") == 0)
102 else if (algorithm.compare(
"mitchell") == 0)
103 filter=MitchellFilter;
104 else if (algorithm.compare(
"lanczos") == 0)
105 filter=LanczosFilter;
106 else if (algorithm.compare(
"bessel") == 0)
108 else if (algorithm.compare(
"sinc") == 0)
110 else if (algorithm.compare(
"sample") == 0)
111 resize_algorithm=Sample;
112 else if (algorithm.compare(
"scale") == 0)
113 resize_algorithm=Scale;
115 ParseError(argv_index,argv);
119 else if (command.compare(
"-geometry") == 0)
123 geometry=
Geometry(argv[argv_index]);
127 ParseError(argv_index,argv);
132 else if (command.compare(
"-resample") == 0)
136 resample=
Geometry(argv[argv_index]);
140 ParseError(argv_index,argv);
145 ParseError(argv_index,argv);
148 if (argv_index>argc-1)
149 ParseError(argv_index,argv);
150 std::string input_file(argv[argv_index]);
153 ParseError(argv_index,argv);
154 std::string output_file(argv[argv_index]);
157 Image image(input_file);
158 if (density.isValid())
159 image.density(density);
160 density=image.density();
162 if (resample.isValid())
166 (image.columns()*((
double)resample.x()/density.x())+0.5),
168 (image.rows()*((
double)resample.y()/density.y())+0.5));
169 image.density(resample);
171 switch (resize_algorithm)
174 image.sample(geometry);
177 image.scale(geometry);
180 image.filterType(filter);
181 image.zoom(geometry);
184 image.write(output_file);
186 catch( exception &error_ )
188 cout <<
"Caught exception: " << error_.what() << endl;