]> mj.ucw.cz Git - libucw.git/blob - images/decomp.c
Merge with git+ssh://cvs.ucw.cz/projects/sherlock/GIT/sherlock.git
[libucw.git] / images / decomp.c
1 #include <stdlib.h>
2 #include <string.h>
3 #include <assert.h>
4 #include <alloca.h>
5 #include "lib/config.h"
6 #include "img.h"
7
8 int
9 main(int argc, char *argv[]){
10   if(argc<2)
11     return 0;
12   
13   u8 retval=0;
14   struct DecomposeImageInfo dii;
15   ExceptionInfo exception;
16   Image *image=NULL;
17   ImageInfo *image_info=NULL;
18   struct BlockInfo *bi=NULL;
19
20   Image *out_image=NULL;
21
22   InitializeMagick(NULL);
23   GetExceptionInfo(&exception);
24   
25   image_info=CloneImageInfo((ImageInfo *) NULL);
26   (void) strcpy(image_info->filename, argv[1]);
27   image=ReadImage(image_info,&exception);
28   if(exception.severity != UndefinedException)
29     CatchException(&exception);
30
31   if(!image){
32     fprintf(stderr, "Invalid image format");
33     goto exit;
34   }
35   if(image->columns < 4 || image->rows < 4){
36     fprintf(stderr, "Image too small (%dx%d)", (int)image->columns, (int)image->rows);
37     retval = -1;
38     goto exit;
39   }
40
41   QuantizeInfo quantize_info;
42   GetQuantizeInfo(&quantize_info);
43   quantize_info.colorspace = RGBColorspace;
44   QuantizeImage(&quantize_info, image);
45
46   PixelPacket *pixels = (PixelPacket *) AcquireImagePixels(image, 0, 0, image->columns, image->rows, &exception);
47   if (exception.severity != UndefinedException) CatchException(&exception);
48   bi=computeBlockInfo(pixels, image->columns, image->rows, &dii.bi_len);
49   
50   dii.max_cls_num=16;
51   //dii.threshold=100;
52   //dii.diff_threshold=1000;
53   dii.max_cycles=7;
54   dii.init_decomp_num=5;
55   
56   decomposeImage(&dii, bi);
57
58   showBlockInfoAsImage(bi, dii.bi_len, image->columns, image->rows, &out_image, &exception);
59   if (exception.severity != UndefinedException) CatchException(&exception);
60   
61   image_info=CloneImageInfo((ImageInfo *) NULL);
62   strcpy(out_image->filename, "/proc/self/fd/1"); /*out_image->file=stdout did'n work for me*/
63   out_image->compression=JPEGCompression;
64   if(WriteImage(image_info, out_image)==0)
65     CatchException(&out_image->exception);
66 exit:
67   DestroyImage(out_image);
68   DestroyImage(image);
69   DestroyImageInfo(image_info);
70   DestroyExceptionInfo(&exception);
71   DestroyMagick();
72   return retval;
73 }