28 #pragma warning(disable:4244) // Conversion warnings
46 inT32 xsize, ysize, new_xsize, new_ysize;
48 int *hires, *lores, *oldhires, *oldlores;
49 int i, j, n, oldn, row, col;
52 uinT8 curr_colour, new_colour;
60 if (new_ysize > new_xsize)
61 new_line.
init (new_ysize);
63 new_line.
init (new_xsize);
65 factor = (float) xsize / (
float) new_xsize;
67 hires = (
int *) calloc (xsize,
sizeof (
int));
68 lores = (
int *) calloc (new_xsize,
sizeof (
int));
69 oldhires = (
int *) calloc (xsize,
sizeof (
int));
70 oldlores = (
int *) calloc (new_xsize,
sizeof (
int));
71 if ((hires ==
NULL) || (lores ==
NULL) || (oldhires ==
NULL)
72 || (oldlores ==
NULL)) {
73 fprintf (stderr,
"Calloc error in scale_image\n");
85 for (i = 0; i < xsize; i++) {
86 new_colour = *(line.
pixels + i);
87 if (new_colour != curr_colour) {
90 curr_colour = new_colour;
94 for (i = 0; i < n; i++)
98 tprintf (
"Too many transitions (%d) on line 0\n", n);
109 dyn_prog (n, hires, lores, new_xsize, &dummy, &dummy, 0, factor);
111 lores[0] = new_xsize;
115 for (i = 0; i < new_xsize; i++) {
117 curr_colour = 1 - curr_colour;
120 *(new_line.
pixels + i) = curr_colour;
122 image2.
put_line (0, 0, new_xsize, &new_line, 0);
124 for (i = 0; i < n; i++) {
125 oldhires[i] = hires[i];
126 oldlores[i] = lores[i];
129 for (i = n; i < oldn; i++) {
135 for (row = 1; row < ysize; row++) {
140 for (i = 0; i < xsize; i++) {
141 new_colour = *(line.
pixels + i);
142 if (new_colour != curr_colour) {
145 curr_colour = new_colour;
148 for (i = n; i < oldn; i++) {
153 for (i = 0; i < n; i++)
157 tprintf (
"Too many transitions (%d) on line %d\n", n, row);
168 dyn_prog(n, hires, lores, new_xsize, oldhires, oldlores, oldn, factor);
170 lores[0] = new_xsize;
174 for (i = 0; i < new_xsize; i++) {
176 curr_colour = 1 - curr_colour;
179 *(new_line.
pixels + i) = curr_colour;
181 image2.
put_line (0, row, new_xsize, &new_line, 0);
183 for (i = 0; i < n; i++) {
184 oldhires[i] = hires[i];
185 oldlores[i] = lores[i];
187 for (i = n; i < oldn; i++) {
202 factor = (float) ysize / (
float) new_ysize;
205 hires = (
int *) calloc (ysize,
sizeof (
int));
206 lores = (
int *) calloc (new_ysize,
sizeof (
int));
207 oldhires = (
int *) calloc (ysize,
sizeof (
int));
208 oldlores = (
int *) calloc (new_ysize,
sizeof (
int));
209 if ((hires ==
NULL) || (lores ==
NULL) || (oldhires ==
NULL)
210 || (oldlores ==
NULL)) {
211 fprintf (stderr,
"Calloc error in scale_image (vert)\n");
221 for (i = 0; i < ysize; i++) {
222 new_colour = *(line.
pixels + i);
223 if (new_colour != curr_colour) {
226 curr_colour = new_colour;
231 for (i = 0; i < n; i++)
235 tprintf (
"Too many transitions (%d) on column 0\n", n);
246 dyn_prog (n, hires, lores, new_ysize, &dummy, &dummy, 0, factor);
248 lores[0] = new_ysize;
252 for (i = 0; i < new_ysize; i++) {
254 curr_colour = 1 - curr_colour;
257 *(new_line.
pixels + i) = curr_colour;
259 target_image.
put_column (0, 0, new_ysize, &new_line, 0);
261 for (i = 0; i < n; i++) {
262 oldhires[i] = hires[i];
263 oldlores[i] = lores[i];
265 for (i = n; i < oldn; i++) {
271 for (col = 1; col < xsize; col++) {
276 for (i = 0; i < ysize; i++) {
277 new_colour = *(line.
pixels + i);
278 if (new_colour != curr_colour) {
281 curr_colour = new_colour;
284 for (i = n; i < oldn; i++) {
290 for (i = 0; i < n; i++)
294 tprintf (
"Too many transitions (%d) on column %d\n", n, col);
305 dyn_prog(n, hires, lores, new_ysize, oldhires, oldlores, oldn, factor);
307 lores[0] = new_ysize;
311 for (i = 0; i < new_ysize; i++) {
313 curr_colour = 1 - curr_colour;
316 *(new_line.
pixels + i) = curr_colour;
318 target_image.
put_column (col, 0, new_ysize, &new_line, 0);
320 for (i = 0; i < n; i++) {
321 oldhires[i] = hires[i];
322 oldlores[i] = lores[i];
324 for (i = n; i < oldn; i++) {
351 inT32 xsize, ysize, new_xsize, new_ysize;
360 &target_image, 0, 0, (
inT32) (1.0 / factor),
FALSE);
361 else if (factor >= 2)
363 0, 0, new_xsize, new_ysize, (
inT32) factor,
FALSE);