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 ));
32 case XAXIS: /* Horizontal flip */
36 case YAXIS: /* Vertical flip */
40 case XYAXIS: /* Horizontal and Vertical flip */
45 im_log((aIMCTX, 1, "i_flipxy: direction is invalid\n" ));
46 im_push_errorf(aIMCTX, 0, "direction %d invalid", direction);
53 flip_row_pal(i_palidx *row, i_img_dim width) {
55 i_palidx *leftp = row;
56 i_palidx *rightp = row + width - 1;
58 while (leftp < rightp) {
70 IM_SUFFIX(flip_row)(IM_COLOR *row, i_img_dim width) {
72 IM_COLOR *leftp = row;
73 IM_COLOR *rightp = row + width - 1;
75 while (leftp < rightp) {
89 if (im->type == i_palette_type) {
90 i_palidx *line = mymalloc(im->xsize * sizeof(i_palidx));
91 for (y = 0; y < im->ysize; ++y) {
92 i_gpal(im, 0, im->xsize, y, line);
93 flip_row_pal(line, im->xsize);
94 i_ppal(im, 0, im->xsize, y, line);
99 #code im->bits == i_8_bits
100 IM_COLOR *line = mymalloc(im->xsize * sizeof(IM_COLOR));
101 for (y = 0; y < im->ysize; ++y) {
102 IM_GLIN(im, 0, im->xsize, y, line);
103 IM_SUFFIX(flip_row)(line, im->xsize);
104 IM_PLIN(im, 0, im->xsize, y, line);
114 i_img_dim boty = im->ysize - 1;
115 if (im->type == i_palette_type) {
116 i_palidx *top_line = mymalloc(im->xsize * sizeof(i_palidx));
117 i_palidx *bot_line = mymalloc(im->xsize * sizeof(i_palidx));
118 while (topy < boty) {
119 i_gpal(im, 0, im->xsize, topy, top_line);
120 i_gpal(im, 0, im->xsize, boty, bot_line);
121 i_ppal(im, 0, im->xsize, topy, bot_line);
122 i_ppal(im, 0, im->xsize, boty, top_line);
130 #code im->bits == i_8_bits
131 IM_COLOR *top_line = mymalloc(im->xsize * sizeof(IM_COLOR));
132 IM_COLOR *bot_line = mymalloc(im->xsize * sizeof(IM_COLOR));
133 while (topy < boty) {
134 IM_GLIN(im, 0, im->xsize, topy, top_line);
135 IM_GLIN(im, 0, im->xsize, boty, bot_line);
136 IM_PLIN(im, 0, im->xsize, topy, bot_line);
137 IM_PLIN(im, 0, im->xsize, boty, top_line);
150 i_img_dim boty = im->ysize - 1;
151 if (im->type == i_palette_type) {
152 i_palidx *top_line = mymalloc(im->xsize * sizeof(i_palidx));
153 i_palidx *bot_line = mymalloc(im->xsize * sizeof(i_palidx));
154 while (topy < boty) {
155 i_gpal(im, 0, im->xsize, topy, top_line);
156 i_gpal(im, 0, im->xsize, boty, bot_line);
157 flip_row_pal(top_line, im->xsize);
158 flip_row_pal(bot_line, im->xsize);
159 i_ppal(im, 0, im->xsize, topy, bot_line);
160 i_ppal(im, 0, im->xsize, boty, top_line);
168 #code im->bits == i_8_bits
169 IM_COLOR *top_line = mymalloc(im->xsize * sizeof(IM_COLOR));
170 IM_COLOR *bot_line = mymalloc(im->xsize * sizeof(IM_COLOR));
171 while (topy < boty) {
172 IM_GLIN(im, 0, im->xsize, topy, top_line);
173 IM_GLIN(im, 0, im->xsize, boty, bot_line);
174 IM_SUFFIX(flip_row)(top_line, im->xsize);
175 IM_SUFFIX(flip_row)(bot_line, im->xsize);
176 IM_PLIN(im, 0, im->xsize, topy, bot_line);
177 IM_PLIN(im, 0, im->xsize, boty, top_line);
182 IM_GLIN(im, 0, im->xsize, topy, top_line);
183 IM_SUFFIX(flip_row)(top_line, im->xsize);
184 IM_PLIN(im, 0, im->xsize, topy, top_line);