1 #define IMAGER_NO_CONTEXT
4 static void flip_h(i_img *im);
5 static void flip_v(i_img *im);
6 static void flip_hv(i_img *im);
13 =item i_flipxy(im, axis)
15 Flips the image inplace around the axis specified.
16 Returns 0 if parameters are invalid.
19 axis - 0 = x, 1 = y, 2 = both
25 i_flipxy(i_img *im, int direction) {
29 im_log((aIMCTX, 1, "i_flipxy(im %p, direction %d)\n", im, direction ));
35 case XAXIS: /* Horizontal flip */
39 case YAXIS: /* Vertical flip */
43 case XYAXIS: /* Horizontal and Vertical flip */
48 im_log((aIMCTX, 1, "i_flipxy: direction is invalid\n" ));
49 im_push_errorf(aIMCTX, 0, "direction %d invalid", direction);
56 flip_row_pal(i_palidx *row, i_img_dim width) {
58 i_palidx *leftp = row;
59 i_palidx *rightp = row + width - 1;
61 while (leftp < rightp) {
73 IM_SUFFIX(flip_row)(IM_COLOR *row, i_img_dim width) {
75 IM_COLOR *leftp = row;
76 IM_COLOR *rightp = row + width - 1;
78 while (leftp < rightp) {
92 if (im->type == i_palette_type) {
93 i_palidx *line = mymalloc(im->xsize * sizeof(i_palidx));
94 for (y = 0; y < im->ysize; ++y) {
95 i_gpal(im, 0, im->xsize, y, line);
96 flip_row_pal(line, im->xsize);
97 i_ppal(im, 0, im->xsize, y, line);
102 #code im->bits == i_8_bits
103 IM_COLOR *line = mymalloc(im->xsize * sizeof(IM_COLOR));
104 for (y = 0; y < im->ysize; ++y) {
105 IM_GLIN(im, 0, im->xsize, y, line);
106 IM_SUFFIX(flip_row)(line, im->xsize);
107 IM_PLIN(im, 0, im->xsize, y, line);
117 i_img_dim boty = im->ysize - 1;
118 if (im->type == i_palette_type) {
119 i_palidx *top_line = mymalloc(im->xsize * sizeof(i_palidx));
120 i_palidx *bot_line = mymalloc(im->xsize * sizeof(i_palidx));
121 while (topy < boty) {
122 i_gpal(im, 0, im->xsize, topy, top_line);
123 i_gpal(im, 0, im->xsize, boty, bot_line);
124 i_ppal(im, 0, im->xsize, topy, bot_line);
125 i_ppal(im, 0, im->xsize, boty, top_line);
133 #code im->bits == i_8_bits
134 IM_COLOR *top_line = mymalloc(im->xsize * sizeof(IM_COLOR));
135 IM_COLOR *bot_line = mymalloc(im->xsize * sizeof(IM_COLOR));
136 while (topy < boty) {
137 IM_GLIN(im, 0, im->xsize, topy, top_line);
138 IM_GLIN(im, 0, im->xsize, boty, bot_line);
139 IM_PLIN(im, 0, im->xsize, topy, bot_line);
140 IM_PLIN(im, 0, im->xsize, boty, top_line);
153 i_img_dim boty = im->ysize - 1;
154 if (im->type == i_palette_type) {
155 i_palidx *top_line = mymalloc(im->xsize * sizeof(i_palidx));
156 i_palidx *bot_line = mymalloc(im->xsize * sizeof(i_palidx));
157 while (topy < boty) {
158 i_gpal(im, 0, im->xsize, topy, top_line);
159 i_gpal(im, 0, im->xsize, boty, bot_line);
160 flip_row_pal(top_line, im->xsize);
161 flip_row_pal(bot_line, im->xsize);
162 i_ppal(im, 0, im->xsize, topy, bot_line);
163 i_ppal(im, 0, im->xsize, boty, top_line);
171 #code im->bits == i_8_bits
172 IM_COLOR *top_line = mymalloc(im->xsize * sizeof(IM_COLOR));
173 IM_COLOR *bot_line = mymalloc(im->xsize * sizeof(IM_COLOR));
174 while (topy < boty) {
175 IM_GLIN(im, 0, im->xsize, topy, top_line);
176 IM_GLIN(im, 0, im->xsize, boty, bot_line);
177 IM_SUFFIX(flip_row)(top_line, im->xsize);
178 IM_SUFFIX(flip_row)(bot_line, im->xsize);
179 IM_PLIN(im, 0, im->xsize, topy, bot_line);
180 IM_PLIN(im, 0, im->xsize, boty, top_line);
185 IM_GLIN(im, 0, im->xsize, topy, top_line);
186 IM_SUFFIX(flip_row)(top_line, im->xsize);
187 IM_PLIN(im, 0, im->xsize, topy, top_line);