/*********************************************** * * file d:\cips\rotate.c * * Functions: This file contains * rotate_flip_image_array * * Purpose: * This function rotates or flips an image * array in one of five ways. * * External Calls: * wtiff.c - round_off_image_size * create_file_if_needed * write_array_into_tiff_image * tiff.c - read_tiff_header * rtiff.c - read_tiff_image * * * Modifications: * 1 April 1992 - created * *************************************************/ #include "cips.h" /******************************************* * * rotate_flip_image_array(... * * This function rotates an image array * in one of three ways or flips an image * array either vertically or horizontally. * The rotation_type parameter specifies * the operation. When rotation_type is * 1, 2, or 3 you rotate. When it is * 4 or 5 you flip. * * I define rotation as this: Pin down the * lower left hand corner of the image array * and rotate the image 90 degrees clockwise. * 1 rotation is 90 degrees, 2 rotations are * 180 degrees, and 3 rotations are 270 degrees. * 4 rotations bring you back to where you * started. * * The cases are: * * If the input image array is: * 1 2 3 * 4 5 6 * 7 8 9 * * Rotate # 1 - the result is: * 7 4 1 * 8 5 2 * 9 6 3 * * Rotate # 2 - the result is: * 9 8 7 * 6 5 4 * 3 2 1 * * Rotate # 3 - the result is: * 3 6 9 * 2 5 8 * 1 4 7 * * Flip # 4 - horizontal the result is: * 3 2 1 * 6 5 4 * 9 8 7 * * Flip # 5 - vertical the result is: * 7 8 9 * 4 5 6 * 1 2 3 * * * The in_file is the source image with * parameters given by il1, ie1, ll1, le1. * * The out_file is the destination image with * parameters given by il2, ie2, ll2, le2. * *******************************************/ rotate_flip_image_array(in_name, out_name, the_image, out_image, il1, ie1, ll1, le1, il2, ie2, ll2, le2, rotation_type) char in_name[], out_name[]; int il1, ie1, ll1, le1, il2, ie2, ll2, le2, rotation_type; short the_image[ROWS][COLS], out_image[ROWS][COLS]; { int cd2, i, j, length, rd2, type, width; struct tiff_header_struct image_header; create_file_if_needed(in_name, out_name, out_image); /******************************************* * * Check the rotation_type. If it is not * a valid value, set it to 1. * *******************************************/ type = rotation_type; if(type != 1 && type != 2 && type != 3 && type != 4 && type != 5) type = 1; read_tiff_image(in_name, the_image, il1, ie1, ll1, le1); /******************************************* * * Rotate the image array as desired. * *******************************************/ /******************************************* * * 1 90 degree rotation * *******************************************/ if(type == 1 || type == 2 || type == 3){ for(i=0; i