1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
# include "bitmapConfig.h"
# include <string.h>
# include <stdlib.h>
# include <stdio.h>
# include "bitmap.h"
# include <appDebugon.h>
int bmWrite( const char * filename,
const unsigned char * buffer,
BitmapDescription * bd,
int fileFormat,
double compressionFactor )
{
if ( ! bmFileFormats[fileFormat].bffFileType->bftWrite )
{
LLDEB(fileFormat,bmFileFormats[fileFormat].bffFileType->bftWrite);
return -1;
}
return (*bmFileFormats[fileFormat].bffFileType->bftWrite)(
filename,
buffer,
bd,
bmFileFormats[fileFormat].bffPrivate,
compressionFactor );
}
int bmCanWrite( BitmapDescription * bd,
int fileFormat,
double compressionFactor )
{
if ( ! bmFileFormats[fileFormat].bffFileType->bftWrite )
{ return -1; }
return (*bmFileFormats[fileFormat].bffFileType->bftCanWrite)(
bd,
bmFileFormats[fileFormat].bffPrivate,
compressionFactor );
}
int bmRead( const char * filename,
unsigned char ** pBuffer,
BitmapDescription * bd,
int * pFileFormat,
double * pCompressionFactor )
{
int fileType;
int privateType;
int fileFormat;
char * extension= strrchr( filename, '.' );
if ( ! extension )
{ LDEB(extension); return -1; }
extension++;
for ( fileType= 0; fileType < bmNumberOfFileTypes; fileType++ )
{
if ( ! bmFileTypes[fileType]->bftRead )
{ continue; }
if ( ! strcmp( extension, bmFileTypes[fileType]->bftFileExtension ) )
{
unsigned char * buffer;
if ( (*bmFileTypes[fileType]->bftRead)( filename,
&buffer,
bd,
&privateType,
pCompressionFactor ) )
{ LDEB(fileType); return -1; }
for ( fileFormat= 0;
fileFormat < bmNumberOfFileFormats;
fileFormat++ )
{
if ( bmFileFormats[fileFormat].bffFileType->bftRead ==
bmFileTypes[fileType]->bftRead &&
bmFileFormats[fileFormat].bffPrivate ==
privateType )
{ *pBuffer= buffer; *pFileFormat= fileFormat; return 0; }
}
LDEB(privateType); free( buffer ); return -1;
}
}
SDEB(extension); return -1;
}
|