diff options
Diffstat (limited to 'html/download/im_copy.cpp')
-rw-r--r-- | html/download/im_copy.cpp | 120 |
1 files changed, 0 insertions, 120 deletions
diff --git a/html/download/im_copy.cpp b/html/download/im_copy.cpp deleted file mode 100644 index cf0e0d5..0000000 --- a/html/download/im_copy.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* IM 3 sample that copies an image from one file to another. - It is good to test the file formats read and write. - If the destiny does not supports the input image it aborts and returns an error. - - Needs "im.lib". - - Usage: im_copy <input_file_name> <output_file_name> [<output_format>] - - Example: im_copy test.tif test_proc.tif -*/ - -#include <im.h> -#include <im_util.h> - -#include <stdio.h> -#include <stdlib.h> - - -void PrintError(int error) -{ - switch (error) - { - case IM_ERR_OPEN: - printf("Error Opening File.\n"); - break; - case IM_ERR_MEM: - printf("Insuficient memory.\n"); - break; - case IM_ERR_ACCESS: - printf("Error Accessing File.\n"); - break; - case IM_ERR_DATA: - printf("Image type not Suported.\n"); - break; - case IM_ERR_FORMAT: - printf("Invalid Format.\n"); - break; - case IM_ERR_COMPRESS: - printf("Invalid or unsupported compression.\n"); - break; - default: - printf("Unknown Error.\n"); - } -} - -int main(int argc, char* argv[]) -{ - if (argc < 3) - { - printf("Invalid number of arguments.\n"); - return 0; - } - - void* data = NULL; - imFile* ifile = NULL; - imFile* ofile = NULL; - - int error; - ifile = imFileOpen(argv[1], &error); - if (!ifile) - goto man_error; - - char format[10]; - char compression[20]; - int image_count; - imFileGetInfo(ifile, format, compression, &image_count); - - ofile = imFileNew(argv[2], argv[3]? argv[3]: format, &error); - if (!ofile) - goto man_error; - - if (!argv[3]) - imFileSetInfo(ofile, compression); - - for (int i = 0; i < image_count; i++) - { - int width, height, color_mode, data_type; - error = imFileReadImageInfo(ifile, i, &width, &height, &color_mode, &data_type); - if (error != IM_ERR_NONE) - goto man_error; - - data = malloc(imImageDataSize(width, height, color_mode, data_type)); - - error = imFileReadImageData(ifile, data, 0, -1); - if (error != IM_ERR_NONE) - goto man_error; - - char* attrib_list[50]; - int attrib_list_count; - imFileGetAttributeList(ifile, attrib_list, &attrib_list_count); - - for (int a = 0; a < attrib_list_count; a++) - { - int attrib_data_type, attrib_count; - const void* attrib_data = imFileGetAttribute(ifile, attrib_list[a], &attrib_data_type, &attrib_count); - imFileSetAttribute(ofile, attrib_list[a], attrib_data_type, attrib_count, attrib_data); - } - - error = imFileWriteImageInfo(ofile, width, height, color_mode, data_type); - if (error != IM_ERR_NONE) - goto man_error; - - error = imFileWriteImageData(ofile, data); - if (error != IM_ERR_NONE) - goto man_error; - } - - free(data); - imFileClose(ifile); - imFileClose(ofile); - - return 1; - -man_error: - PrintError(error); - if (data) free(data); - if (ifile) imFileClose(ifile); - if (ofile) imFileClose(ofile); - return 0; -} |