summaryrefslogtreecommitdiffstats
path: root/hl/test/test_image.c
diff options
context:
space:
mode:
Diffstat (limited to 'hl/test/test_image.c')
-rw-r--r--hl/test/test_image.c741
1 files changed, 371 insertions, 370 deletions
diff --git a/hl/test/test_image.c b/hl/test/test_image.c
index 9645bad..426ae1d 100644
--- a/hl/test/test_image.c
+++ b/hl/test/test_image.c
@@ -1,17 +1,17 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+* Copyright by The HDF Group. *
+* Copyright by the Board of Trustees of the University of Illinois. *
+* All rights reserved. *
+* *
+* This file is part of HDF5. The full HDF5 copyright notice, including *
+* terms governing use, modification, and redistribution, is contained in *
+* the files COPYING and Copyright.html. COPYING can be found at the root *
+* of the source code distribution tree; Copyright.html can be found at the *
+* root level of an installed copy of the electronic HDF5 document set and *
+* is linked from the top-level documents page. It can also be found at *
+* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+* access to either file, you may request a copy from help@hdfgroup.org. *
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdlib.h>
#include <string.h>
@@ -61,31 +61,31 @@ static int read_palette(const char* file_name, rgb_t *palette, size_t palette_si
unsigned char *image_data = NULL;
/*-------------------------------------------------------------------------
- * the main program
- *-------------------------------------------------------------------------
- */
+* the main program
+*-------------------------------------------------------------------------
+*/
int main(void)
{
int nerrors=0;
-
+
nerrors += test_simple()<0 ?1:0;
nerrors += test_data()<0 ?1:0;
nerrors += test_generate()<0 ?1:0;
-
+
if (nerrors) goto error;
printf("All image tests passed.\n");
return 0;
-
+
error:
printf("***** %d IMAGE TEST%s FAILED! *****\n",nerrors, 1 == nerrors ? "" : "S");
return 1;
}
/*-------------------------------------------------------------------------
- * a simple test that generates images and palettes
- *-------------------------------------------------------------------------
- */
+* a simple test that generates images and palettes
+*-------------------------------------------------------------------------
+*/
static int test_simple(void)
{
@@ -94,23 +94,24 @@ static int test_simple(void)
hsize_t planes;
hid_t fid;
int i, j, n, space;
+ hsize_t u;
char interlace[20];
hssize_t npals;
-
+
/* 8-bit image */
unsigned char buf1 [ WIDTH*HEIGHT ];
unsigned char pal[ PAL_ENTRIES * 3 ]; /* palette array */
hsize_t pal_dims[2] = {PAL_ENTRIES,3}; /* palette dimensions */
-
+
/* 24-bit image */
unsigned char buf2 [ WIDTH*HEIGHT*3 ];
-
+
/* read data */
unsigned char buf1_out [ WIDTH*HEIGHT ];
unsigned char buf2_out [ WIDTH*HEIGHT*3 ];
unsigned char pal_out[ PAL_ENTRIES * 3 ]; /* palette array */
hsize_t pal_dims_out[2]; /* palette dimensions */
-
+
/* create an image */
space = WIDTH*HEIGHT / PAL_ENTRIES;
for (i=0, j=0, n=0; i < WIDTH*HEIGHT; i++, j++ )
@@ -121,10 +122,10 @@ static int test_simple(void)
n++;
j=0;
}
-
+
}
-
-
+
+
/* create an image */
space = WIDTH*HEIGHT / 256;
for (i=0, j=0, n=0; i < WIDTH*HEIGHT*3; i+=3, j++ )
@@ -141,9 +142,9 @@ static int test_simple(void)
j=0;
}
}
-
- /*-------------------------------------------------------------------------
- * define a palette, blue to red tones
+
+ /*-------------------------------------------------------------------------
+ * define a palette, blue to red tones
*-------------------------------------------------------------------------
*/
for ( i=0, n=0; i<PAL_ENTRIES*3; i+=3, n++)
@@ -152,140 +153,140 @@ static int test_simple(void)
pal[i+1]=0; /* green */
pal[i+2]=255-n; /* blue */
}
-
+
/* Create a new HDF5 file using default properties. */
fid = H5Fcreate(FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* Indexed image test
*-------------------------------------------------------------------------
*/
-
+
TESTING("indexed image");
-
+
/* Write image */
if ( H5IMmake_image_8bit( fid, IMAGE1_NAME, width, height, buf1 ) < 0 )
goto out;
-
+
/* Make a palette */
if ( H5IMmake_palette( fid, PAL_NAME, pal_dims, pal ) < 0 )
goto out;
-
+
/* Attach a palette to the image dataset */
if ( H5IMlink_palette( fid, IMAGE1_NAME, PAL_NAME ) < 0 )
goto out;
-
+
/* Read image */
if ( H5IMget_image_info( fid, IMAGE1_NAME, &width, &height, &planes, interlace, &npals ) < 0 )
goto out;
-
+
if ( H5IMread_image( fid, IMAGE1_NAME, buf1_out ) < 0 )
goto out;
-
- for (i = 0; i < height*width*planes; i++)
+
+ for (u = 0; u < height*width*planes; u++)
{
- if ( buf1[i] != buf1_out[i] )
+ if ( buf1[u] != buf1_out[u] )
goto out;
-
+
}
-
-
+
+
PASSED();
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* True color image test
*-------------------------------------------------------------------------
*/
-
+
TESTING("true color image");
-
+
/* Write image */
if ( H5IMmake_image_24bit( fid, IMAGE2_NAME, width, height, "INTERLACE_PIXEL", buf2 ) )
goto out;
-
+
/* Read image */
if ( H5IMget_image_info( fid, IMAGE2_NAME, &width, &height, &planes, interlace, &npals ) < 0 )
goto out;
-
+
if ( H5IMread_image( fid, IMAGE2_NAME, buf2_out ) < 0 )
goto out;
-
- for (i = 0; i < height*width*planes; i++)
+
+ for (u = 0; u < height*width*planes; u++)
{
- if ( buf2[i] != buf2_out[i] )
+ if ( buf2[u] != buf2_out[u] )
goto out;
}
-
-
+
+
PASSED();
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* H5IMget_npalettes test
*-------------------------------------------------------------------------
*/
-
+
TESTING("pallete functions");
-
+
if ( H5IMget_npalettes( fid, IMAGE1_NAME, &npals ) < 0 )
goto out;
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* H5IMget_palette_info test
*-------------------------------------------------------------------------
*/
-
+
if ( H5IMget_palette_info( fid, IMAGE1_NAME, 0, pal_dims_out ) < 0 )
goto out;
-
- for (i = 0; i < 2; i++)
+
+ for (i = 0; i < 2; i++)
{
- if ( pal_dims[i] != pal_dims_out[i] )
+ if ( pal_dims[i] != pal_dims_out[i] )
goto out;
}
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* H5IMget_palette test
*-------------------------------------------------------------------------
*/
-
+
if ( H5IMget_palette( fid, IMAGE1_NAME, 0, pal_out ) < 0 )
goto out;
-
- for (i = 0; i < PAL_ENTRIES * 3; i++)
+
+ for (i = 0; i < PAL_ENTRIES * 3; i++)
{
- if ( pal[i] != pal_out[i] )
+ if ( pal[i] != pal_out[i] )
goto out;
}
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* H5IMis_image test
*-------------------------------------------------------------------------
*/
-
+
if ( H5IMis_image( fid, IMAGE1_NAME ) < 0 )
goto out;
-
+
if ( H5IMis_image( fid, IMAGE2_NAME ) < 0 )
goto out;
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* H5IMis_palette test
*-------------------------------------------------------------------------
*/
-
+
if ( H5IMis_palette( fid, PAL_NAME ) < 0 )
goto out;
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* end tests
*-------------------------------------------------------------------------
*/
-
+
/* Close the file. */
- if(H5Fclose( fid ) < 0)
+ if(H5Fclose( fid ) < 0)
goto out;
-
-
+
+
PASSED();
return 0;
@@ -301,9 +302,9 @@ out:
/*-------------------------------------------------------------------------
- * read sample realistic image data from ASCII files
- *-------------------------------------------------------------------------
- */
+* read sample realistic image data from ASCII files
+*-------------------------------------------------------------------------
+*/
static int test_data(void)
{
@@ -314,60 +315,60 @@ static int test_data(void)
unsigned char pal[256*3]; /* buffer to hold an HDF5 palette */
rgb_t rgb[256]; /* buffer to hold a .pal file palette */
int i, n;
-
+
/* create a file using default properties */
if ((fid=H5Fcreate(FILE2,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
goto out;
-
+
printf("Testing read ascii image data and generate images\n");
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* read 8bit image data
*-------------------------------------------------------------------------
*/
-
+
TESTING2("make indexed image");
-
+
/* read first data file */
if (read_data(DATA_FILE1,&width,&height)<0)
goto out;
-
+
/* make an image */
if (H5IMmake_image_8bit(fid,IMAGE1_NAME,width,height,image_data)<0)
goto out;
-
+
PASSED();
-
-
+
+
TESTING2("attaching palettes");
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* palette #1. rainbow palette. data is contained in "pal_rgb.h"
*-------------------------------------------------------------------------
*/
-
+
/* initialize the palette data */
pal_dims[0] = 256;
pal_dims[1] = 3;
-
+
/* make a palette */
if (H5IMmake_palette(fid,PAL1_NAME,pal_dims,pal_rgb)<0)
goto out;
-
+
/* attach a palette to the image dataset */
if (H5IMlink_palette(fid,IMAGE1_NAME,PAL1_NAME)<0)
goto out;
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* palette #2. sepia palette.
* read a PAL file and attach the palette to the HDF5 file
*-------------------------------------------------------------------------
*/
-
+
/* read a PAL file */
if (read_palette(PAL2_FILE, rgb, sizeof(rgb))<0)
goto out;
-
+
/* transfer to the HDF5 buffer */
for ( i=0, n=0; i<256*3; i+=3, n++)
{
@@ -375,25 +376,25 @@ static int test_data(void)
pal[i+1]=rgb[n].g;
pal[i+2]=rgb[n].b;
}
-
+
/* make a palette */
if (H5IMmake_palette(fid,PAL2_NAME,pal_dims,pal)<0)
goto out;
-
+
/* attach the palette to the image dataset */
if (H5IMlink_palette(fid,IMAGE1_NAME,PAL2_NAME)<0)
goto out;
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* palette #3. earth palette.
* read a PAL file and attach the palette to the HDF5 file
*-------------------------------------------------------------------------
*/
-
+
/* read a PAL file */
if (read_palette(PAL3_FILE, rgb, sizeof(rgb))<0)
goto out;
-
+
/* transfer to the HDF5 buffer */
for ( i=0, n=0; i<256*3; i+=3, n++)
{
@@ -401,19 +402,19 @@ static int test_data(void)
pal[i+1]=rgb[n].g;
pal[i+2]=rgb[n].b;
}
-
+
/* make a palette */
if (H5IMmake_palette(fid,PAL3_NAME,pal_dims,pal)<0)
goto out;
-
+
/* attach the palette to the image dataset */
if (H5IMlink_palette(fid,IMAGE1_NAME,PAL3_NAME)<0)
goto out;
-
+
PASSED();
-
-
- /*-------------------------------------------------------------------------
+
+
+ /*-------------------------------------------------------------------------
* palette #4. blue-red
* make a palette whith blue to red colors
*-------------------------------------------------------------------------
@@ -424,60 +425,60 @@ static int test_data(void)
pal[i+1]=0;
pal[i+2]=255-n;
}
-
+
/* make a palette */
if (H5IMmake_palette(fid,PAL4_NAME,pal_dims,pal)<0)
goto out;
-
+
/* attach the palette to the image dataset */
if (H5IMlink_palette(fid,IMAGE1_NAME,PAL4_NAME)<0)
goto out;
-
-
- /*-------------------------------------------------------------------------
+
+
+ /*-------------------------------------------------------------------------
* true color image example with pixel interlace
*-------------------------------------------------------------------------
*/
-
+
TESTING2("make true color image with pixel interlace");
-
+
/* read second data file */
if ((read_data(DATA_FILE2,&width,&height))<0)
goto out;
-
+
/* make image */
if ((H5IMmake_image_24bit(fid,IMAGE2_NAME,width,height,"INTERLACE_PIXEL",image_data))<0)
goto out;
-
+
PASSED();
-
+
/*-------------------------------------------------------------------------
* True color image example with plane interlace
*-------------------------------------------------------------------------
*/
-
+
TESTING2("make true color image with plane interlace");
-
+
/* read third data file */
if ((read_data(DATA_FILE3,&width,&height))<0)
goto out;
-
+
/* make image */
if ((H5IMmake_image_24bit(fid,IMAGE3_NAME,width,height,"INTERLACE_PLANE",image_data))<0)
goto out;
-
+
PASSED();
-
-
- /*-------------------------------------------------------------------------
+
+
+ /*-------------------------------------------------------------------------
* close
*-------------------------------------------------------------------------
*/
if (H5Fclose(fid)<0)
goto out;
-
+
return 0;
-
+
/* error zone, gracefully close */
out:
H5E_BEGIN_TRY {
@@ -488,16 +489,16 @@ out:
}
- /*
- The following test provides an examples of how to generate HDF5 image data from
- floating point data. In the example we use real life topographic data
- (from the North American hemisphere). In the dataset sea values are represented
- as negative numbers and land values are represented as positive numbers.
- The example generates 3 HDF5 images, one that generates an image from all the values,
- another that generates an image from the land values and another that generates an
- image from the sea values.
- For the example we used data from MODB, the Mediterranean Oceanic Data Base
- http://modb.oce.ulg.ac.be/
+/*
+The following test provides an examples of how to generate HDF5 image data from
+floating point data. In the example we use real life topographic data
+(from the North American hemisphere). In the dataset sea values are represented
+as negative numbers and land values are represented as positive numbers.
+The example generates 3 HDF5 images, one that generates an image from all the values,
+another that generates an image from the land values and another that generates an
+image from the sea values.
+For the example we used data from MODB, the Mediterranean Oceanic Data Base
+http://modb.oce.ulg.ac.be/
*/
@@ -512,14 +513,14 @@ static int test_generate(void)
char *srcdir = getenv("srcdir"); /* the source directory */
char data_file[512]=""; /* buffer to hold name of existing data file */
int i;
-
+
/* create a file using default properties */
if ((fid=H5Fcreate(FILE3,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
goto out;
-
+
printf("Testing read and process data and make indexed images\n");
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* compose the name of the file to open, using the srcdir, if appropriate
*-------------------------------------------------------------------------
*/
@@ -529,12 +530,12 @@ static int test_generate(void)
strcat(data_file, "/");
}
strcat(data_file,DATA_FILE4);
-
+
/*-------------------------------------------------------------------------
* read data; the file data format is described below
*-------------------------------------------------------------------------
*/
-
+
f = fopen( data_file, "r" ) ;
if ( f == NULL )
{
@@ -543,82 +544,82 @@ static int test_generate(void)
return -1;
}
-/*
-!The first line of the ASCII file contains the dimension of the array :
-! IMAX, JMAX, KMAX. The integers are stored with the FORTRAN format I5.
-!The second line contains the exclusion value, the minimum and the maximum value of this
-! file. These numbers are stored with the FORTRAN format E12.5.
-! The remaining lines contains the data of the array, with 5 numbers per line
-! (except the last line for each I-line).
-! The array is stored in horizontal slices from sea surface to sea bottom and from
-! north to south. So the indexes go from :
-!
-! DO K = KMAX to 1
-! DO J = JMAX to 1
-! DO I = 1 to IMAX
-! read
-! OD
-! OD
-! OD
-!
-! ____________________________
-! / /| (imax,jmax,kmax)
-! / sea surface / |
-! / / |
-! /__________________________ / |
-! | | |
-! | | | (imax,jmax,1) n
-! | | / /
-! | | / /
-! ^ j | | / w <-----o-----> e
-! k | / |__________________________|/ /
-! | / (imax,1,1) /
-! |----------> s
-! i
-!
-*/
+ /*
+ !The first line of the ASCII file contains the dimension of the array :
+ ! IMAX, JMAX, KMAX. The integers are stored with the FORTRAN format I5.
+ !The second line contains the exclusion value, the minimum and the maximum value of this
+ ! file. These numbers are stored with the FORTRAN format E12.5.
+ ! The remaining lines contains the data of the array, with 5 numbers per line
+ ! (except the last line for each I-line).
+ ! The array is stored in horizontal slices from sea surface to sea bottom and from
+ ! north to south. So the indexes go from :
+ !
+ ! DO K = KMAX to 1
+ ! DO J = JMAX to 1
+ ! DO I = 1 to IMAX
+ ! read
+ ! OD
+ ! OD
+ ! OD
+ !
+ ! ____________________________
+ ! / /| (imax,jmax,kmax)
+ ! / sea surface / |
+ ! / / |
+ ! /__________________________ / |
+ ! | | |
+ ! | | | (imax,jmax,1) n
+ ! | | / /
+ ! | | / /
+ ! ^ j | | / w <-----o-----> e
+ ! k | / |__________________________|/ /
+ ! | / (imax,1,1) /
+ ! |----------> s
+ ! i
+ !
+ */
fscanf( f, "%d %d %d", &imax, &jmax, &kmax );
fscanf( f, "%f %f %f", &valex, &xmin, &xmax );
-
+
data = (float*) malloc ( imax * jmax * kmax * sizeof( float ));
image_data = (unsigned char*) malloc ( imax * jmax * kmax * sizeof( unsigned char ));
-
+
for ( i = 0; i < imax * jmax * kmax; i++ )
{
fscanf( f, "%f ", &value );
data[i] = value;
}
fclose( f );
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* transform the data from floating point to unsigned char
* we are processing all the data here
*-------------------------------------------------------------------------
*/
-
+
TESTING2("make indexed image from all the data");
-
+
for ( i = 0; i < imax * jmax * kmax; i++ )
{
image_data[i] = (unsigned char)(( 255 * (data[i] - xmin ) ) / (xmax - xmin ));
}
-
+
/* Make the image */
if ((H5IMmake_image_8bit(fid,"All data",(hsize_t)imax,(hsize_t)jmax,image_data))<0)
goto out;
-
+
PASSED();
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* transform the data from floating point to unsigned char
* here we just process the land data
*-------------------------------------------------------------------------
*/
-
+
TESTING2("make indexed image from land data");
-
+
for ( i = 0; i < imax * jmax * kmax; i++ )
{
if ( data[i] < 0 )
@@ -626,21 +627,21 @@ static int test_generate(void)
else
image_data[i] = (unsigned char)(( 255 * (data[i] ) ) / xmax );
}
-
+
/* make the image */
if ((H5IMmake_image_8bit(fid,"Land data",(hsize_t)imax,(hsize_t)jmax,image_data))<0)
goto out;
-
+
PASSED();
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* transform the data from floating point to unsigned char
* here we just process the sea data
*-------------------------------------------------------------------------
*/
-
+
TESTING2("make indexed image from sea data");
-
+
for ( i = 0; i < imax * jmax * kmax; i++ )
{
if ( data[i] > 0 )
@@ -648,24 +649,24 @@ static int test_generate(void)
else
image_data[i] = (unsigned char)(( 255 * (data[i] - xmin ) ) / xmin );
}
-
+
/* make the image */
if ((H5IMmake_image_8bit(fid,"Sea data",(hsize_t)imax,(hsize_t)jmax,image_data))<0)
goto out;
-
+
PASSED();
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* make a palette and attach it to the datasets
*-------------------------------------------------------------------------
*/
-
+
TESTING2("attaching palettes");
-
+
/* make a palette */
if ((H5IMmake_palette(fid,PAL1_NAME,pal_dims,pal_rgb))<0)
goto out;
-
+
/* attach the palette to the image datasets */
if ((H5IMlink_palette(fid,"All data",PAL1_NAME))<0)
goto out;
@@ -673,19 +674,19 @@ static int test_generate(void)
goto out;
if ((H5IMlink_palette(fid,"Sea data",PAL1_NAME))<0)
goto out;
-
+
PASSED();
-
-
- /*-------------------------------------------------------------------------
+
+
+ /*-------------------------------------------------------------------------
* close
*-------------------------------------------------------------------------
*/
if (H5Fclose(fid)<0)
goto out;
-
+
return 0;
-
+
/* error zone, gracefully close */
out:
H5E_BEGIN_TRY {
@@ -697,25 +698,25 @@ out:
/*-------------------------------------------------------------------------
- * read_data
- * utility function to read ASCII image data
- * the files have a header of the type
- *
- * components
- * n
- * height
- * n
- * width
- * n
- *
- * followed by the image data
- *
- *-------------------------------------------------------------------------
- */
+* read_data
+* utility function to read ASCII image data
+* the files have a header of the type
+*
+* components
+* n
+* height
+* n
+* width
+* n
+*
+* followed by the image data
+*
+*-------------------------------------------------------------------------
+*/
static int read_data( const char* fname, /*IN*/
- hsize_t *width, /*OUT*/
- hsize_t *height /*OUT*/ )
+ hsize_t *width, /*OUT*/
+ hsize_t *height /*OUT*/ )
{
int i, n;
int color_planes;
@@ -724,8 +725,8 @@ static int read_data( const char* fname, /*IN*/
int w, h;
char *srcdir = getenv("srcdir"); /* the source directory */
char data_file[512]=""; /* buffer to hold name of existing data file */
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* compose the name of the file to open, using "srcdir", if appropriate
*-------------------------------------------------------------------------
*/
@@ -736,62 +737,62 @@ static int read_data( const char* fname, /*IN*/
strcat(data_file, "/");
}
strcat(data_file,fname);
-
- /*-------------------------------------------------------------------------
+
+ /*-------------------------------------------------------------------------
* read
*-------------------------------------------------------------------------
*/
-
+
f = fopen(data_file, "r");
if ( f == NULL )
{
printf( "Could not open file %s. Try set $srcdir \n", data_file );
return -1;
}
-
+
fscanf( f, "%s", str );
fscanf( f, "%d", &color_planes );
fscanf( f, "%s", str );
fscanf( f, "%d", &h);
fscanf( f, "%s", str );
fscanf( f, "%d", &w);
-
+
*width = (hsize_t)w;
*height = (hsize_t)h;
-
+
if ( image_data )
{
free( image_data );
image_data=NULL;
}
-
+
image_data = (unsigned char*) malloc (w * h * color_planes * sizeof( unsigned char ));
-
+
for (i = 0; i < h * w * color_planes ; i++)
{
fscanf( f, "%d",&n );
image_data[i] = (unsigned char)n;
}
fclose(f);
-
+
return 1;
-
+
}
/*-------------------------------------------------------------------------
- * read_palette
- * Read an ASCII palette file .PAL into an array
- * the files have a header of the type
- *
- * Parameters:
- * fname - name of file to read.
- * palette - array of rgb_t to store the read palette.
- * palette_size - number of elements in 'palette' array
- *
- *-------------------------------------------------------------------------
- */
+* read_palette
+* Read an ASCII palette file .PAL into an array
+* the files have a header of the type
+*
+* Parameters:
+* fname - name of file to read.
+* palette - array of rgb_t to store the read palette.
+* palette_size - number of elements in 'palette' array
+*
+*-------------------------------------------------------------------------
+*/
#define STRING_JASC "JASC-PAL"
@@ -803,118 +804,118 @@ static int read_palette(const char* fname,
rgb_t *palette,
size_t palette_size)
{
- FILE *file;
- char buffer[80];
- unsigned u;
- unsigned int red;
- unsigned int green;
- unsigned int blue;
- unsigned nentries;
- char *srcdir = getenv("srcdir"); /* the source directory */
- char data_file[512]; /* buffer to hold name of existing data file */
+ FILE *file;
+ char buffer[80];
+ unsigned u;
+ unsigned int red;
+ unsigned int green;
+ unsigned int blue;
+ unsigned nentries;
+ char *srcdir = getenv("srcdir"); /* the source directory */
+ char data_file[512]; /* buffer to hold name of existing data file */
-/*-------------------------------------------------------------------------
- * compose the name of the file to open, using "srcdir", if appropriate
- *-------------------------------------------------------------------------
- */
- strcpy(data_file, "");
- if (srcdir)
- {
- strcpy(data_file, srcdir);
- strcat(data_file, "/");
- }
- strcat(data_file,fname);
-
- /* ensure the given palette is valid */
- if (!palette)
- return -1;
-
- /* open the input file */
- if (!(file = fopen(data_file, "r")))
- {
- printf( "Could not open file %s. Try set $srcdir \n", data_file );
- return -1;
- }
-
- /* read the file ident string */
- if (fgets(buffer, sizeof(buffer), file) == NULL)
- {
- fclose(file);
- return -1;
- }
-
- /* ensure it matches the palette file ident string */
- if ( strncmp(buffer, STRING_JASC, sizeof(STRING_JASC) - 1) != 0 &&
- strncmp(buffer, STRING_CWPAL, sizeof(STRING_CWPAL) - 1) != 0 )
- {
- fclose(file);
- return -1;
- }
-
- /* read the version string */
- if (fgets(buffer, sizeof(buffer), file) == NULL)
- {
- fclose(file);
- return -1;
- }
-
- /* ensure it matches the palette file version string */
- if ( strncmp(buffer, VERSION_JASC, sizeof(VERSION_JASC) - 1) != 0 &&
- strncmp(buffer, VERSION_CWPAL, sizeof(VERSION_CWPAL) - 1) != 0 )
- {
- fclose(file);
- return -1;
- }
-
- /* read the number of colors */
- if (fgets(buffer, sizeof(buffer), file) == NULL)
- {
- fclose(file);
- return -1;
- }
-
-
- /* extract the number of colors.
+ /*-------------------------------------------------------------------------
+ * compose the name of the file to open, using "srcdir", if appropriate
+ *-------------------------------------------------------------------------
+ */
+ strcpy(data_file, "");
+ if (srcdir)
+ {
+ strcpy(data_file, srcdir);
+ strcat(data_file, "/");
+ }
+ strcat(data_file,fname);
+
+ /* ensure the given palette is valid */
+ if (!palette)
+ return -1;
+
+ /* open the input file */
+ if (!(file = fopen(data_file, "r")))
+ {
+ printf( "Could not open file %s. Try set $srcdir \n", data_file );
+ return -1;
+ }
+
+ /* read the file ident string */
+ if (fgets(buffer, sizeof(buffer), file) == NULL)
+ {
+ fclose(file);
+ return -1;
+ }
+
+ /* ensure it matches the palette file ident string */
+ if ( strncmp(buffer, STRING_JASC, sizeof(STRING_JASC) - 1) != 0 &&
+ strncmp(buffer, STRING_CWPAL, sizeof(STRING_CWPAL) - 1) != 0 )
+ {
+ fclose(file);
+ return -1;
+ }
+
+ /* read the version string */
+ if (fgets(buffer, sizeof(buffer), file) == NULL)
+ {
+ fclose(file);
+ return -1;
+ }
+
+ /* ensure it matches the palette file version string */
+ if ( strncmp(buffer, VERSION_JASC, sizeof(VERSION_JASC) - 1) != 0 &&
+ strncmp(buffer, VERSION_CWPAL, sizeof(VERSION_CWPAL) - 1) != 0 )
+ {
+ fclose(file);
+ return -1;
+ }
+
+ /* read the number of colors */
+ if (fgets(buffer, sizeof(buffer), file) == NULL)
+ {
+ fclose(file);
+ return -1;
+ }
+
+
+ /* extract the number of colors.
check for missing version or number of colors
in this case it reads the first entry
*/
- if ( strlen( buffer ) > 4 )
- {
- fclose(file);
- return -1;
- }
-
- if (sscanf(buffer, "%u", &nentries) != 1)
- {
- fclose(file);
- return -1;
- }
-
- /* ensure there are a sensible number of colors in the palette */
- if ((nentries > 256) || (nentries > palette_size))
- {
- fclose(file);
- return(-1);
- }
-
- /* read the palette entries */
- for (u = 0; u < nentries; u++)
- {
- /* extract the red, green and blue color components. */
- if (fscanf(file, "%u %u %u", &red, &green, &blue) != 3)
- {
- fclose(file);
- return -1;
- }
- /* store this palette entry */
- palette[u].r = (unsigned char)red;
- palette[u].g = (unsigned char)green;
- palette[u].b = (unsigned char)blue;
- }
-
- /* close file */
- fclose(file);
-
- return nentries;
+ if ( strlen( buffer ) > 4 )
+ {
+ fclose(file);
+ return -1;
+ }
+
+ if (sscanf(buffer, "%u", &nentries) != 1)
+ {
+ fclose(file);
+ return -1;
+ }
+
+ /* ensure there are a sensible number of colors in the palette */
+ if ((nentries > 256) || (nentries > palette_size))
+ {
+ fclose(file);
+ return(-1);
+ }
+
+ /* read the palette entries */
+ for (u = 0; u < nentries; u++)
+ {
+ /* extract the red, green and blue color components. */
+ if (fscanf(file, "%u %u %u", &red, &green, &blue) != 3)
+ {
+ fclose(file);
+ return -1;
+ }
+ /* store this palette entry */
+ palette[u].r = (unsigned char)red;
+ palette[u].g = (unsigned char)green;
+ palette[u].b = (unsigned char)blue;
+ }
+
+ /* close file */
+ fclose(file);
+
+ return nentries;
}