From: Arnar Mar Hrafnkelsson Date: Thu, 17 May 2001 08:10:08 +0000 (+0000) Subject: Made TODO into a seperate file and removed it from the Changes file. X-Git-Tag: Imager-0.48^2~624 X-Git-Url: http://git.imager.perl.org/imager.git/commitdiff_plain/b921d41485a4462322563061653aa243d89b9526 Made TODO into a seperate file and removed it from the Changes file. Also added i_errmsg to the image structure in design/represent.txt since that is sort of the next generation image structure. --- diff --git a/Changes b/Changes index 1e040b02..1acc40c0 100644 --- a/Changes +++ b/Changes @@ -417,82 +417,10 @@ Revision history for Perl extension Imager. - changed README note on libgif bug to refer to t105gif.t instead of t10formats.t -~~~~~~~~~~~~~^ ^ ^~~~~~~~~~~~~~ - - -0.40 TODO list - iolayer: - - Add scalar/mmap to iolayer - - Add close() code to iolayer - - Merge callback interface into iolayer - - Add interface for writing to all formats but tiff - - Add interface for reading for png (started), - gif (merge with cb patch), ppm and raw - - Add make new tests once all formats support io_layer - - Implment the maxread threshold (Indicates how far - a library can read before it indicates that it's done). - - MultiImage & metadata support: - - Figure what interface should be between C and perl? - - How to store data in the C interface for tags/metadata? - - - other internal image representations (design/represent.txt) - - - Error handling, make a general i_errstr object and arrange - such that each image has an i_errstr object to hold its - local errors? - - Good stuff: - - image colour transformations based on input images, see - design/cmyktorgb.txt for Addi's description - - eventually support tiff's madness - - Old sins: - - Make sure everything is doable with the OO interface - - Split the other classes into seperate files - - Compile with memory debugging enabled and fix leaks - - dynaload.c is strongly tied to perl - - Add mycalloc() and myrealloc() to the malloc() wrappers. - - - should i_readgif returned colormap be an arrayref of - Imager::Color objects? Note that this will break - compatibility with previous releases. - - - should Imager::Font be split into a base class whose - new chooses a base class (ttf, t1 or win32?) to - instantiate. Currently Imager::Font uses if() statements to - select between each type of font. It should. - - - should we overload <=> or cmp for Imager::Color objects? - too many worms, leave it out - - - if gif_delays is a number instead of an arrayref, use that - number for each frame - - - provide patches for libgif and libungif that fix their bugs - and give a useful extension interface. Probe for the - installation of the patches in Makefile.PL to let gif.c - know what features it can use. - - - Add options for pnm, writer to save in any of the p1..P6 - formats. Even if the input has 1 channel, write 3 and such - cases. Also allow ascii mode. Need to be able to write - pbm images which needs ties to the quantization code. - - Documentation: - - Add to the documentation - - Write a tutorial? - - Write a guide to installing the helper libraries - - Go through the entire project and add comments in pod - so doco.perl can be used to read them. - - - should the interlace option for reading raw images have - symbolic names in the OO interface? - -=================================================== +================================================================= For latest versions check the Imager-devel pages: http://www.eecs.umich.edu/~addi/perl/Imager/devel/ -=================================================== +================================================================= diff --git a/TODO b/TODO new file mode 100644 index 00000000..551a908f --- /dev/null +++ b/TODO @@ -0,0 +1,81 @@ + *** TODO *** + + + +Iolayer: +- Add scalar/mmap to iolayer +- Add close() code to iolayer +- Merge callback interface into iolayer +- Add interface for writing to all formats but tiff +- Add interface for reading for png (started), + gif (merge with cb patch), ppm and raw +- Add new tests once all formats support io_layer +- Implment the maxread threshold (Indicates how far + a library can read before it indicates that it's done). + + +Enhanched internal structure: + +MultiImage & metadata support: +- Figure what interface should be between C and perl? +- How to store data in the C interface for tags/metadata? + Support tiff's madness, i.e. tags and options. +- Error handling, make a general i_errstr object and arrange + such that each image has an i_errstr object to hold its + local errors? +- SEE design/represent.txt for proposed new structure and + interface design that takes these factors into account. + +New Features: +- Transforms, interpolated multidimensional lookup tables. + Usefull for CMYK <-> RGB table lookup. + +- Finish antialiased filled polygon function. + + +Clean up: +- Make sure everything is doable with the OO interface + i_flood_fill() f. example. +- Split the other classes into seperate files + Imager::Font::TT, Imager::Font::T1, currently + an if statement is used to choose what code to + run. +- Compile with memory debugging enabled and fix all leaks + +- dynaload.c is strongly tied to perl + +- Add mycalloc() and myrealloc() to the malloc() wrappers. + +- should we overload <=> or cmp for Imager::Color objects? + too many worms, leave it out + +- should the interlace option for reading raw images have + symbolic names in the OO interface? + + + +Format specific issues: +- should i_readgif returned colormap be an arrayref of + Imager::Color objects? Note that this will break + compatibility with previous releases. + +- if gif_delays is a number instead of an arrayref, use that + number for each frame + +- provide patches for libgif and libungif that fix their bugs + and give a useful extension interface. Probe for the + installation of the patches in Makefile.PL to let gif.c + know what features it can use. + +- Add options for pnm, writer to save in any of the p1..P6 + formats. Even if the input has 1 channel, write 3 and such + cases. Also allow ascii mode. Need to be able to write + pbm images which needs ties to the quantization code. + + +Documentation: +- Add to the documentation +- Write a tutorial? +- Write a guide to installing the helper libraries +- Go through the entire project and add comments in pod + so doco.perl can be used to read them. diff --git a/design/represent.txt b/design/represent.txt index 28370d51..aa696608 100644 --- a/design/represent.txt +++ b/design/represent.txt @@ -171,11 +171,13 @@ The basic interface would include: unsigned char channels[MAX_CHANNELS]; /* and others as we currently have */ } i_color; + typedef struct { struct { double char r, g, b, a; } rgb; double channels[MAX_CHANNELS]; /* and others as we currently have */ } i_fcolor; + typedef struct i_img_tag i_img; typedef int (*i_f_ppix_t)(i_img *im, int x, int y, i_color *pix); typedef int (*i_f_ppixf_t)(i_img *im, int x, int y, i_fcolor *pix); @@ -185,10 +187,12 @@ The basic interface would include: typedef int (*i_f_gpixf_t)(i_img *im, int x, int y, i_fcolor *pix); typedef int (*i_f_glin_t)(i_img *im, int x, int r, int y, i_color *vals); typedef int (*i_f_glinf_t)(i_img *im, int x, int r, int y, i_fcolor *vals); + typedef enum { i_literal_type, /* keeps RGB values per pixel */ i_palette_type, /* keeps a palette index per pixel */ } i_img_types; + /* interface functions typedef int (*i_f_gpal_t)(i_img *im, int x, int r, int y, i_palidx *vals); typedef int (*i_f_ppal_t)(i_img *im, int x, int r, int y, i_palidx *vals); @@ -196,6 +200,7 @@ The basic interface would include: typedef int (*i_f_getcolor_t)(i_img *im, int i, i_color *); typedef int (*i_f_colorcount_t)(i_img *im); typedef int (*i_f_findcolor_t)(i_img *im); + typedef enum { /* bits per sample, not per pixel */ /* a paletted image might have one bit perl sample */ @@ -203,17 +208,25 @@ The basic interface would include: i_16_bits = 16, i_double_bits = 64 } i_img_bits; + + typedef struct { + char *msg; + int code; + } i_errmsg; + typedef struct { char *name; /* name of a given tag, might be NULL */ int code; /* number of a given tag, -1 if it has no meaning */ char *data; /* value of a given tag if it's not an int, may be NULL */ int idata; /* value of a given tag if data is NULL */ } i_img_tag; + typedef struct { int count; /* how many tags have been set */ int alloc; /* how many tags have been allocated for */ i_img_tag *tags; } i_img_tags; + typedef struct { int channels; int xsize, ysize, bytes; @@ -225,6 +238,8 @@ The basic interface would include: /* can be NULL if virtual is non-zero */ i_img_tags tags; + i_errmsg error_stack[ERRSTK]; /* Store errors with image */ + /* interface functions */ i_f_ppix_t i_f_ppix; i_f_ppixf_t i_f_ppixf; @@ -261,5 +276,6 @@ Tony Cook =head1 HISTORY 16May2001 - initially completed version, could use some polishing +16May2001 - Added i_error stack to the image structure. =cut