3 static void flip_h(i_img *im);
4 static void flip_v(i_img *im);
5 static void flip_hv(i_img *im);
12 =item i_flipxy(im, axis)
14 Flips the image inplace around the axis specified.
15 Returns 0 if parameters are invalid.
18 axis - 0 = x, 1 = y, 2 = both
24 i_flipxy(i_img *im, int direction) {
27 mm_log((1, "i_flipxy(im %p, direction %d)\n", im, direction ));
33 case XAXIS: /* Horizontal flip */
37 case YAXIS: /* Vertical flip */
41 case XYAXIS: /* Horizontal and Vertical flip */
46 mm_log((1, "i_flipxy: direction is invalid\n" ));
47 i_push_errorf(0, "direction %d invalid", direction);
55 flip_row_pal(i_palidx *row, i_img_dim width) {
57 i_palidx *leftp = row;
58 i_palidx *rightp = row + width - 1;
60 while (leftp < rightp) {
72 IM_SUFFIX(flip_row)(IM_COLOR *row, i_img_dim width) {
74 IM_COLOR *leftp = row;
75 IM_COLOR *rightp = row + width - 1;
77 while (leftp < rightp) {
91 if (im->type == i_palette_type) {
92 i_palidx *line = mymalloc(im->xsize * sizeof(i_palidx));
93 for (y = 0; y < im->ysize; ++y) {
94 i_gpal(im, 0, im->xsize, y, line);
95 flip_row_pal(line, im->xsize);
96 i_ppal(im, 0, im->xsize, y, line);
101 #code im->bits == i_8_bits
102 IM_COLOR *line = mymalloc(im->xsize * sizeof(IM_COLOR));
103 for (y = 0; y < im->ysize; ++y) {
104 IM_GLIN(im, 0, im->xsize, y, line);
105 IM_SUFFIX(flip_row)(line, im->xsize);
106 IM_PLIN(im, 0, im->xsize, y, line);
116 i_img_dim boty = im->ysize - 1;
117 if (im->type == i_palette_type) {
118 i_palidx *top_line = mymalloc(im->xsize * sizeof(i_palidx));
119 i_palidx *bot_line = mymalloc(im->xsize * sizeof(i_palidx));
120 while (topy < boty) {
121 i_gpal(im, 0, im->xsize, topy, top_line);
122 i_gpal(im, 0, im->xsize, boty, bot_line);
123 i_ppal(im, 0, im->xsize, topy, bot_line);
124 i_ppal(im, 0, im->xsize, boty, top_line);
132 #code im->bits == i_8_bits
133 IM_COLOR *top_line = mymalloc(im->xsize * sizeof(IM_COLOR));
134 IM_COLOR *bot_line = mymalloc(im->xsize * sizeof(IM_COLOR));
135 while (topy < boty) {
136 IM_GLIN(im, 0, im->xsize, topy, top_line);
137 IM_GLIN(im, 0, im->xsize, boty, bot_line);
138 IM_PLIN(im, 0, im->xsize, topy, bot_line);
139 IM_PLIN(im, 0, im->xsize, boty, top_line);
152 i_img_dim boty = im->ysize - 1;
153 if (im->type == i_palette_type) {
154 i_palidx *top_line = mymalloc(im->xsize * sizeof(i_palidx));
155 i_palidx *bot_line = mymalloc(im->xsize * sizeof(i_palidx));
156 while (topy < boty) {
157 i_gpal(im, 0, im->xsize, topy, top_line);
158 i_gpal(im, 0, im->xsize, boty, bot_line);
159 flip_row_pal(top_line, im->xsize);
160 flip_row_pal(bot_line, im->xsize);
161 i_ppal(im, 0, im->xsize, topy, bot_line);
162 i_ppal(im, 0, im->xsize, boty, top_line);
170 #code im->bits == i_8_bits
171 IM_COLOR *top_line = mymalloc(im->xsize * sizeof(IM_COLOR));
172 IM_COLOR *bot_line = mymalloc(im->xsize * sizeof(IM_COLOR));
173 while (topy < boty) {
174 IM_GLIN(im, 0, im->xsize, topy, top_line);
175 IM_GLIN(im, 0, im->xsize, boty, bot_line);
176 IM_SUFFIX(flip_row)(top_line, im->xsize);
177 IM_SUFFIX(flip_row)(bot_line, im->xsize);
178 IM_PLIN(im, 0, im->xsize, topy, bot_line);
179 IM_PLIN(im, 0, im->xsize, boty, top_line);
184 IM_GLIN(im, 0, im->xsize, topy, top_line);
185 IM_SUFFIX(flip_row)(top_line, im->xsize);
186 IM_PLIN(im, 0, im->xsize, topy, top_line);