mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-23 16:20:57 +08:00
Purpose: Adding new feature Description: Added gif2h5 and h52gif conversion utilities Solution: The utilites follow the framework built for the gif2hdf and hdf2gif utilities for hdf4. The main files modified were those that read the H5 file and those that write H5 file. In the future, if you wish to continue with the framework and extend it to .png or some other fileformat the main files to edit will be the gif reader and writer. One point to note with h52gif. You have to specify the exact location of the image and the palette that it links to. You can choose not to specify a palette (uniform grayscale chosen in this case) but you must specify image location. In the future, someone could edit the readhdf.c source to enable the reader to parse the hdf file and select all images with corresponding palettes. Platforms tested: modi4 , eirene , hawkwind , arabica , Ren (NT 4.0) , Personal box (win2k)
115 lines
2.7 KiB
C
115 lines
2.7 KiB
C
/* #include <hdf.h> */
|
|
#include "gif.h"
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
int
|
|
main(argv , argc)
|
|
int argv;
|
|
char *argc[];
|
|
{
|
|
|
|
GIFTOMEM GifMemoryStruct;
|
|
GIFIMAGEDESC gifImageDesc;
|
|
|
|
FILE *fpGif;
|
|
|
|
/* replacing int32 with long */
|
|
long i,ImageCount;
|
|
long filesize;
|
|
|
|
BYTE *MemGif;
|
|
BYTE *StartPos;
|
|
|
|
/* VSNAMELENMAX is a carryover from HDF4 and is #defined to 256 in gif.h */
|
|
char GIFFileName[VSNAMELENMAX];
|
|
char HDFFileName[VSNAMELENMAX];
|
|
|
|
/* Initialize all GifMemoryStruct pointers to null
|
|
** to prevent hassles later on
|
|
*/
|
|
GifMemoryStruct.GifHeader = NULL;
|
|
GifMemoryStruct.GifImageDesc = NULL;
|
|
GifMemoryStruct.GifGraphicControlExtension = NULL;
|
|
GifMemoryStruct.GifPlainTextExtension = NULL;
|
|
GifMemoryStruct.GifApplicationExtension = NULL;
|
|
GifMemoryStruct.GifCommentExtension = NULL;
|
|
|
|
|
|
if (argv<3)
|
|
{
|
|
printf("\n\nWrong Usage. Use:\ngif2hdf <GIFFILE> <HDFFILE>\n\n");
|
|
return(-1);
|
|
}
|
|
|
|
|
|
|
|
strncpy(GIFFileName , argc[1] , VSNAMELENMAX - 1);
|
|
strncpy(HDFFileName , argc[2] , VSNAMELENMAX - 1);
|
|
GIFFileName[VSNAMELENMAX - 1] = '\0';
|
|
HDFFileName[VSNAMELENMAX - 1] = '\0';
|
|
|
|
if (!(fpGif = fopen(GIFFileName,"rb"))) {
|
|
printf("Unable to open GIF file for reading.\n");
|
|
printf("Filename (including path) must be less than %d charachters in length\n",VSNAMELENMAX);
|
|
exit(-1);
|
|
}
|
|
|
|
/* Get the whole file into memory. Mem's much faster than I/O */
|
|
fseek(fpGif, 0L , 2);
|
|
filesize = ftell(fpGif);
|
|
fseek(fpGif, 0L , 0);
|
|
if (filesize == 0) printf("File Size Zero");
|
|
if (!(MemGif = StartPos = (BYTE *)malloc(filesize))) {
|
|
printf("Out of memory");
|
|
exit (-1);
|
|
}
|
|
if (fread(MemGif,filesize,1,fpGif) != 1) {
|
|
printf("Corrupted Input File");
|
|
exit(-1);
|
|
}
|
|
|
|
fseek(fpGif,0L,0);
|
|
|
|
/*
|
|
** Call Gif2Mem and break the whole file into parts.
|
|
** Gif2Mem also calls decompresses the images so we don't
|
|
** have to worry about that
|
|
*/
|
|
GifMemoryStruct = Gif2Mem(MemGif);
|
|
if (ferror(fpGif)) {
|
|
printf("File Stream Error\n\n");
|
|
exit(-1);
|
|
}
|
|
fclose(fpGif);
|
|
|
|
/* Call WriteHDF from here. Go ahead and change WriteHDF to write
|
|
** whatever format you want
|
|
*/
|
|
if (WriteHDF(GifMemoryStruct , argc[2] , argc[1]))
|
|
printf("HDF Write Error\n\n");
|
|
|
|
/* Free all buffers */
|
|
/* replacing int32 with long */
|
|
ImageCount = (long)((GifMemoryStruct.GifHeader)->ImageCount);
|
|
|
|
for(i = 0 ; i < ImageCount ; i++)
|
|
{
|
|
gifImageDesc = *(GifMemoryStruct.GifImageDesc[i]);
|
|
if (gifImageDesc.Image != NULL)
|
|
free(gifImageDesc.Image);
|
|
|
|
if (GifMemoryStruct.GifGraphicControlExtension[i] != NULL)
|
|
free(GifMemoryStruct.GifGraphicControlExtension[i]);
|
|
|
|
}
|
|
free(StartPos);
|
|
|
|
free (GifMemoryStruct.GifHeader);
|
|
|
|
if (GifMemoryStruct.GifApplicationExtension != NULL)
|
|
free (GifMemoryStruct.GifApplicationExtension);
|
|
|
|
return (0);
|
|
}
|