mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-23 16:20:57 +08:00
[svn-r15405] added comments, cleaned code
tested: windows, linux
This commit is contained in:
parent
1f817abd7b
commit
bb8bf261ee
@ -13,22 +13,21 @@
|
||||
* access to either file, you may request a copy from help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* From jpeg documentation
|
||||
*
|
||||
* Include file for users of JPEG library.
|
||||
* You will need to have included system headers that define at least
|
||||
* the typedefs FILE and size_t before you can include jpeglib.h.
|
||||
* (stdio.h is sufficient on ANSI-conforming systems.)
|
||||
* You may also wish to include "jerror.h".
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <memory.h>
|
||||
|
||||
/*
|
||||
* Include file for users of JPEG library.
|
||||
* system headers that define at least the typedefs FILE and size_t are needed before
|
||||
*/
|
||||
|
||||
#include "jpeglib.h"
|
||||
#include "jerror.h"
|
||||
|
||||
/* Tools library and HDF5 Image headers */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "h5tools.h"
|
||||
#include "h5tools_utils.h"
|
||||
@ -58,7 +57,6 @@ typedef struct
|
||||
const char *file_name;
|
||||
const char *template_name;
|
||||
const char *image_name;
|
||||
int image_type;
|
||||
int convert_true;
|
||||
int idx_palette;
|
||||
int verbose;
|
||||
@ -79,16 +77,20 @@ static void convert_to_true( hsize_t width, hsize_t height, unsigned char* ibuf,
|
||||
*
|
||||
* Purpose: h52jpeg main program
|
||||
*
|
||||
* main reads command line options and calls h52jpeg
|
||||
*
|
||||
* Programmer: Pedro Vicente, pvn@hdfgroup.org
|
||||
*
|
||||
* Return: 1, error, 0 success
|
||||
*
|
||||
* Date: May 30, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int main(int argc, const char *argv[])
|
||||
{
|
||||
h52jpeg_opt_t opt;
|
||||
int op;
|
||||
h52jpeg_opt_t opt; /* command line options for h52jpeg */
|
||||
int op; /* option got from command line */
|
||||
|
||||
/* initialze options to 0 */
|
||||
memset(&opt,0,sizeof(h52jpeg_opt_t));
|
||||
@ -98,15 +100,19 @@ int main(int argc, const char *argv[])
|
||||
{
|
||||
switch ((char)op)
|
||||
{
|
||||
|
||||
case 'h':
|
||||
usage(progname);
|
||||
exit(EXIT_SUCCESS);
|
||||
|
||||
case 'V':
|
||||
print_version(progname);
|
||||
exit(EXIT_SUCCESS);
|
||||
|
||||
case 'v':
|
||||
opt.verbose = 1;
|
||||
break;
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
opt.image_name = opt_arg;
|
||||
break;
|
||||
@ -171,6 +177,28 @@ static void usage(const char *prog)
|
||||
printf("\n");
|
||||
|
||||
printf(" P - is an integer, the palette index in the HDF5 image. Default is 0\n");
|
||||
printf(" template - is a string used to name the jpeg file name; this name is made\n");
|
||||
printf(" by concatenating this template with the HDF5 image name\n");
|
||||
|
||||
printf("\n");
|
||||
|
||||
printf("Examples of use:\n");
|
||||
printf("\n");
|
||||
printf("1) h52jpeg -v file.h5 myjpeg\n");
|
||||
printf("\n");
|
||||
printf(" Exports all images found on file.h5 to jpeg images, giving output information\n");
|
||||
|
||||
printf("\n");
|
||||
printf("2) h52jpeg -v -i image file.h5 myjpeg\n");
|
||||
printf("\n");
|
||||
printf(" Exports the HDF5 image named <image> to a jpeg file\n");
|
||||
|
||||
printf("\n");
|
||||
printf("2) h52jpeg -v -c p 1 -i image file.h5 myjpeg\n");
|
||||
printf("\n");
|
||||
printf(" Exports the HDF5 image named <image> to a true color jpeg image, using\n");
|
||||
printf(" the palette of index 1 in that image to do the conversion\n");
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -179,11 +207,9 @@ static void usage(const char *prog)
|
||||
*
|
||||
* Parameters: OPT, options at command line
|
||||
*
|
||||
* Purpose: traverse the HDF5 file, save HDF5 images to jpeg files, translate
|
||||
* 2D datasets of classes H5T_INTEGER and H5T_FLOAT to image data and save them
|
||||
* to jpeg files
|
||||
* Purpose: traverse the HDF5 file, save HDF5 images to jpeg files
|
||||
*
|
||||
* Return: 0, all is fine, -1 not all is fine
|
||||
* Return: 0, success, -1 error
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -236,6 +262,7 @@ static int h52jpeg(h52jpeg_opt_t opt)
|
||||
switch ( travt->objs[i].type )
|
||||
{
|
||||
default:
|
||||
printf( "unknown object. Exiting ...\n" );
|
||||
goto out;
|
||||
|
||||
case H5TRAV_TYPE_GROUP:
|
||||
@ -257,7 +284,7 @@ static int h52jpeg(h52jpeg_opt_t opt)
|
||||
} /* i */
|
||||
|
||||
|
||||
/* free table */
|
||||
/* HDfree table */
|
||||
trav_table_free(travt);
|
||||
|
||||
} /* opt.image_name */
|
||||
@ -276,6 +303,8 @@ out:
|
||||
|
||||
} H5E_END_TRY;
|
||||
|
||||
trav_table_free(travt);
|
||||
|
||||
|
||||
return -1;
|
||||
}
|
||||
@ -284,11 +313,14 @@ out:
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: do_object
|
||||
*
|
||||
* Parameters: HDF5 file id, command line options, an object name
|
||||
* Parameters: FID: HDF5 file id
|
||||
* OPT: command line options
|
||||
* OBJECT_NAME: the name of the object (type H5TRAV_TYPE_DATASET)
|
||||
*
|
||||
* Purpose: read HDF5 object, save jpeg image
|
||||
* Purpose: make the jpeg file name, read HDF5 image, save the jpeg image
|
||||
*
|
||||
* Return: 0, all is fine, -1 not all is fine
|
||||
*
|
||||
* Return: 0, success, -1 error
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -316,28 +348,7 @@ int do_object(hid_t fid, h52jpeg_opt_t opt, const char* object_name)
|
||||
/* read image, save jpeg image */
|
||||
done = do_image(fid, opt, object_name, jpeg_name);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* HDF5 Image palette, ignore
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
else if ( H5IMis_palette( fid, object_name ) )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* regular dataset
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
} /* else */
|
||||
|
||||
|
||||
|
||||
if ( opt.verbose)
|
||||
{
|
||||
@ -361,11 +372,14 @@ int do_object(hid_t fid, h52jpeg_opt_t opt, const char* object_name)
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: do_image
|
||||
*
|
||||
* Parameters: HDF5 file id, command line options, an image name
|
||||
* Parameters: FID: HDF5 file id
|
||||
* OPT: command line options
|
||||
* OBJECT_NAME: the name of the HDF5 image
|
||||
* JPEG_NAME: the name of the jpeg image
|
||||
*
|
||||
* Purpose: read HDF5 image, save jpeg image
|
||||
*
|
||||
* Return: 0, all is fine, -1 not all is fine
|
||||
* Return: 0, success, -1 error
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -388,7 +402,7 @@ int do_image(hid_t fid, h52jpeg_opt_t opt, const char* image_name, char* jpeg_na
|
||||
if ( H5IMget_image_info( fid, name, &width, &height, &planes, interlace, &npals ) < 0 )
|
||||
goto out;
|
||||
|
||||
if (NULL == (ibuf = HDmalloc( (size_t)width * (size_t)height * (size_t)planes )))
|
||||
if (NULL == (ibuf = HDmalloc( (int)width * (int)height * (int)planes )))
|
||||
goto out;
|
||||
|
||||
if ( H5IMread_image( fid, name, ibuf ) < 0 )
|
||||
@ -464,7 +478,7 @@ int do_image(hid_t fid, h52jpeg_opt_t opt, const char* image_name, char* jpeg_na
|
||||
if (NULL == (pbuf = HDmalloc( (size_t)pdims[0] * (size_t)pdims[1] )))
|
||||
goto out;
|
||||
|
||||
if (NULL == (tbuf = HDmalloc( (size_t)width * (size_t)height * 3 )))
|
||||
if (NULL == (tbuf = HDmalloc( (int)width * (int)height * 3 )))
|
||||
goto out;
|
||||
|
||||
if ( H5IMget_palette( fid, name, ipal, pbuf ) < 0 )
|
||||
@ -482,8 +496,8 @@ int do_image(hid_t fid, h52jpeg_opt_t opt, const char* image_name, char* jpeg_na
|
||||
|
||||
done = 1;
|
||||
|
||||
free( pbuf );
|
||||
free( tbuf );
|
||||
HDfree( pbuf );
|
||||
HDfree( tbuf );
|
||||
pbuf = NULL;
|
||||
tbuf = NULL;
|
||||
}
|
||||
@ -502,17 +516,13 @@ int do_image(hid_t fid, h52jpeg_opt_t opt, const char* image_name, char* jpeg_na
|
||||
|
||||
} /* conversion to truecolor */
|
||||
|
||||
free( ibuf );
|
||||
HDfree( ibuf );
|
||||
ibuf = NULL;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return done;
|
||||
|
||||
out:
|
||||
|
||||
|
||||
return -1;
|
||||
|
||||
}
|
||||
@ -524,7 +534,7 @@ out:
|
||||
*
|
||||
* Purpose: build a name for the jpeg image file upon a template name
|
||||
* and the HDF5 image name. Replace the special characters
|
||||
* "%", "@", "$", "/", ":", "&", and "*" with "_"
|
||||
* '%', '@', '$', '/', ':', '&', ' ', and '*' with '_'
|
||||
*
|
||||
* Return: void
|
||||
*
|
||||
@ -551,6 +561,7 @@ void make_jpeg_name( const char* template_name, const char* image_name, char* jp
|
||||
(jpeg_name[j] == '/') ||
|
||||
(jpeg_name[j] == ':') ||
|
||||
(jpeg_name[j] == '&') ||
|
||||
(jpeg_name[j] == ' ') ||
|
||||
(jpeg_name[j] == '*') )
|
||||
{
|
||||
jpeg_name[j] = '_';
|
||||
@ -562,11 +573,15 @@ void make_jpeg_name( const char* template_name, const char* image_name, char* jp
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: convert_to_true
|
||||
*
|
||||
* Parameters:
|
||||
* Parameters: WIDTH (IN): width of image
|
||||
* HEIGHT (IN): height of image
|
||||
* IBUF (IN): indexed image buffer
|
||||
* PBUF (IN): palette buffer
|
||||
* TBUF (IN/OUT): true color image buffer
|
||||
*
|
||||
* Purpose: convert a greycolor buffer to a true color using a palette buffer
|
||||
* Purpose: convert a greycolor buffer to a true color buffer using a palette buffer
|
||||
*
|
||||
* Return:
|
||||
* Return: void
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -601,10 +616,10 @@ void convert_to_true( hsize_t width, hsize_t height, unsigned char* ibuf, unsign
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Sample routine for JPEG compression.
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: write_JPEG_file (adapted from example.c of jpeg distribution)
|
||||
*
|
||||
* IMAGE DATA FORMATS:
|
||||
* Purpose: save a jpeg file named FILENAME, using the image buffer IMAGE_BUFFER
|
||||
*
|
||||
* The standard input image format is a rectangular array of pixels, with
|
||||
* each pixel having the same number of "component" values (color channels).
|
||||
@ -613,13 +628,13 @@ void convert_to_true( hsize_t width, hsize_t height, unsigned char* ibuf, unsign
|
||||
* must be adjacent in the row; for example, R,G,B,R,G,B,R,G,B,... for 24-bit
|
||||
* RGB color.
|
||||
*
|
||||
* For this example, we'll assume that this data structure matches the way
|
||||
* our application has stored the image in memory, so we can just pass a
|
||||
* pointer to our image buffer.
|
||||
* Return: void, exits on error
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static
|
||||
void write_JPEG_file(char *filename,
|
||||
void write_JPEG_file(char *filename, /* JPEG file name */
|
||||
JSAMPLE *image_buffer, /* Points to large array of R,G,B-order data */
|
||||
int image_height, /* Number of rows in image */
|
||||
int image_width, /* Number of columns in image */
|
||||
|
Loading…
Reference in New Issue
Block a user