Added read support for sgi .rgb files.
authorArnar Mar Hrafnkelsson <addi@cpan.org>
Fri, 28 Dec 2001 17:53:22 +0000 (17:53 +0000)
committerArnar Mar Hrafnkelsson <addi@cpan.org>
Fri, 28 Dec 2001 17:53:22 +0000 (17:53 +0000)
Changes
Imager.pm
Imager.xs
Makefile.PL
feat.h
image.h

diff --git a/Changes b/Changes
index 0c93e5aff1dc5187fc71b8c1d29812452467c458..cb1d692344571d80b825342baf1f427ff53009fd 100644 (file)
--- a/Changes
+++ b/Changes
@@ -566,7 +566,8 @@ Revision history for Perl extension Imager.
         - applied T1 afm patch from Claes Jacobsson
         - split IM_INCPATH and IM_LIBPATH with $Config{path_sep}, so they
           work on Windows
-
+                               - Added memory pools for easy cleanup of temp buffers
+                               - Added read support for sgi .rgb files.
 =================================================================
 
         For latest versions check the Imager-devel pages:
index f5444a59fcd2cca609d49e0b45b39e51f3a9b1be..4dfb83d755f246ee84595e1cc94f3c4cbd43b1b8 100644 (file)
--- a/Imager.pm
+++ b/Imager.pm
@@ -895,7 +895,7 @@ sub read {
     $self->{ERRSTR}='format not supported'; return undef;
   }
 
-  my %iolready=(jpeg=>1, png=>1, tiff=>1, pnm=>1, raw=>1, bmp=>1, tga=>1);
+  my %iolready=(jpeg=>1, png=>1, tiff=>1, pnm=>1, raw=>1, bmp=>1, tga=>1, rgb=>1);
 
   if ($iolready{$input{'type'}}) {
     # Setup data source
@@ -950,12 +950,21 @@ sub read {
       $self->{IMG}=i_readtga_wiol( $IO, -1 ); # Fixme, check if that length parameter is ever needed
       if ( !defined($self->{IMG}) ) {
        $self->{ERRSTR}=$self->_error_as_msg();
-#      $self->{ERRSTR}='unable to read tga image';
        return undef;
       }
       $self->{DEBUG} && print "loading a tga file\n";
     }
 
+    if ( $input{'type'} eq 'rgb' ) {
+      $self->{IMG}=i_readrgb_wiol( $IO, -1 ); # Fixme, check if that length parameter is ever needed
+      if ( !defined($self->{IMG}) ) {
+       $self->{ERRSTR}=$self->_error_as_msg();
+       return undef;
+      }
+      $self->{DEBUG} && print "loading a tga file\n";
+    }
+
+
     if ( $input{'type'} eq 'raw' ) {
       my %params=(datachannels=>3,storechannels=>3,interleave=>1,%input);
 
@@ -2233,6 +2242,7 @@ sub def_guess_type {
   return 'png'  if ($ext eq "png");
   return 'bmp'  if ($ext eq "bmp" || $ext eq "dib");
   return 'tga'  if ($ext eq "tga");
+  return 'rgb'  if ($ext eq "rgb");
   return 'gif'  if ($ext eq "gif");
   return ();
 }
index 34ce9b5719341cd6716d95e4c52c1f4867991b8b..1b7ec5b3ac961cbea3dc45dd7adcede37eefce59 100644 (file)
--- a/Imager.xs
+++ b/Imager.xs
@@ -1902,6 +1902,31 @@ i_readtga_wiol(ig, length)
                int     length
 
 
+undef_int
+i_writergb_wiol(im,ig, wierdpack, compress, idstring)
+    Imager::ImgRaw     im
+        Imager::IO     ig
+               int     wierdpack
+               int     compress
+              char*    idstring
+            PREINIT:
+                SV* sv1;
+                int rc;
+                int idlen;
+              CODE:
+                idlen  = SvCUR(ST(4));
+                RETVAL = i_writergb_wiol(im, ig, wierdpack, compress, idstring, idlen);
+                OUTPUT:
+                RETVAL
+
+
+Imager::ImgRaw
+i_readrgb_wiol(ig, length)
+        Imager::IO     ig
+               int     length
+
+
+
 Imager::ImgRaw
 i_scaleaxis(im,Value,Axis)
     Imager::ImgRaw     im
index 7439c3fc84076efcad4c99fdc5921ad84980f9ee..ae719d75e920a2ba4d3956e7c444e67d0b4c0e9b 100644 (file)
@@ -64,7 +64,7 @@ if (defined $Config{'d_dlsymun'}) { $OSDEF  .= ' -DDLSYMUN'; }
           filters.o dynaload.o stackmach.o datatypes.o
           regmach.o trans2.o quant.o error.o convert.o
           map.o tags.o palimg.o maskimg.o img16.o rotate.o
-           bmp.o tga.o color.o fills.o imgdouble.o);
+           bmp.o tga.o rgb.o color.o fills.o imgdouble.o);
 
 %opts=(
        'NAME'         => 'Imager',
diff --git a/feat.h b/feat.h
index ade7a928f5642dbf060186a68ca61635dfc3738f..5878514bec99b2621ffad5e1aa254844552476cd 100644 (file)
--- a/feat.h
+++ b/feat.h
@@ -29,5 +29,6 @@ static char *i_format_list[]={
   "pnm",
   "bmp",
   "tga",
+  "rgb",
   NULL};
 
diff --git a/image.h b/image.h
index 97c978180da65f3212325b4d4d118f5512d8dd06..19bd8e845651643420cfa4f94edd97ab9ed7534d 100644 (file)
--- a/image.h
+++ b/image.h
@@ -564,6 +564,9 @@ extern i_img *i_readbmp_wiol(io_glue *ig);
 i_img   * i_readtga_wiol(io_glue *ig, int length);
 undef_int i_writetga_wiol(i_img *img, io_glue *ig, int wierdpack, int compress, char *idstring, size_t idlen);
 
+i_img   * i_readrgb_wiol(io_glue *ig, int length);
+undef_int i_writergb_wiol(i_img *img, io_glue *ig, int wierdpack, int compress, char *idstring, size_t idlen);
+
 i_img * i_scaleaxis(i_img *im, float Value, int Axis);
 i_img * i_scale_nn(i_img *im, float scx, float scy);
 i_img * i_haar(i_img *im);