basic version

This commit is contained in:
2025-05-19 14:44:32 -04:00
parent 7c4f1574b2
commit ed54d7c0b6
22 changed files with 532 additions and 8 deletions

View File

@ -70,7 +70,7 @@ void amscimglib4_printheader(amscimglib4_bitmapfileheader *filehead, amscimglib4
}
void amscimglib4_readimage_bmp(const char *fname, amscimglib4_image *img)
AMSCIMGLIB4_API void amscimglib4_readimage_bmp(const char *fname, amscimglib4_image *img)
{
FILE *fp = NULL;
int I,J;
@ -192,7 +192,7 @@ void amscimglib4_readimage_bmp(const char *fname, amscimglib4_image *img)
}
void amscimglib4_writeimage_bmp(const char *fname, amscimglib4_image *img)
AMSCIMGLIB4_API void amscimglib4_writeimage_bmp(const char *fname, amscimglib4_image *img)
{
FILE *fp = NULL;

View File

@ -333,6 +333,146 @@ AMSCIMGLIB4_API void amscimglib4_image_flipy(amscimglib4_image *img)
return;
}
AMSCIMGLIB4_API void amscimglib4_readimage(const char *fname, amscimglib4_image *img)
{
int type = amscimglib4_magic_type(fname);
if(type==amscimglib4_type_bmp)
{
//BMP
amscimglib4_readimage_bmp(fname,img);
}
else if(type==amscimglib4_type_png)
{
//PNG
amscimglib4_readimage_png(fname,img);
}
else if(type==amscimglib4_type_jpg)
{
//JPEG
amscimglib4_readimage_jpeg(fname,img);
}
else
{
printf("amscimglib4readimage: %s: unrecognized file type!\n", fname);
}
return;
}
AMSCIMGLIB4_API void amscimglib4_writeimage_select(const char *fname, amscimglib4_image *img, int formatspec)
{
amscimglib4_image *zeroimg = NULL;
if(img->sizex>0&&img->sizey>0) //do not write zero size images
{
if(formatspec == amscimglib4_type_bmp)
{
amscimglib4_writeimage_bmp(fname,img);
}
else if(formatspec == amscimglib4_type_png)
{
amscimglib4_writeimage_png(fname,img);
}
else if(formatspec == amscimglib4_type_jpg)
{
amscimglib4_writeimage_jpeg(fname,img,100);
}
else
{
//default to PNG
amscimglib4_writeimage_png(fname,img);
}
} //do not write zero size images
else
{
amscimglib4_image_new(&zeroimg,1,1);
if(formatspec == amscimglib4_type_bmp)
{
amscimglib4_writeimage_bmp(fname,zeroimg);
}
else if(formatspec == amscimglib4_type_png)
{
amscimglib4_writeimage_png(fname,zeroimg);
}
else if(formatspec == amscimglib4_type_jpg)
{
amscimglib4_writeimage_jpeg(fname,zeroimg,100);
}
else
{
//default to PNG
amscimglib4_writeimage_png(fname,zeroimg);
}
amscimglib4_image_delete(&zeroimg);
}//do not write zero size images
return;
}
void amscimglib4_get_extension(const char *fname, char *extension, int bufflen)
{
int I;
int len = strlen(fname);
int ind;
ind = 0;
for(I=len;I>=0;I--)
{
if(fname[I]=='.')
{
ind = I;
break;
}
}
if(ind>0)
{
for(I=ind;I<(len)&&(I-ind)<(bufflen-1);I++)
{
extension[I-ind] = fname[I];
}
extension[I-ind] = '\0';
}
else
{
extension[0] = '\0';
}
for(I=0;I<strlen(extension);I++)
{
extension[I] = tolower(extension[I]);
}
return;
}
AMSCIMGLIB4_API void amscimglib4_writeimage(const char *fname, amscimglib4_image *img)
{
char ext[20];
amscimglib4_get_extension(fname,ext,20);
if(strcmp(ext,".png")==0)
{
amscimglib4_writeimage_select(fname,img,amscimglib4_type_png);
}
else if(strcmp(ext,".bmp")==0)
{
amscimglib4_writeimage_select(fname,img,amscimglib4_type_png);
}
else if(strcmp(ext,".jpg")==0||strcmp(ext,".jpeg")==0)
{
amscimglib4_writeimage_select(fname,img,amscimglib4_type_jpg);
}
else
{
printf("amscimglib4_writeimage: Warning: %s is unidentified extension. Writing file with default format of PNG.\n",ext);
amscimglib4_writeimage_select(fname,img,amscimglib4_type_png);
}
return;
}
#ifdef __cplusplus
}; //end extern "C"
#endif

View File

@ -13,7 +13,7 @@ extern "C" {
#endif
void amscimglib4_readimage_jpeg(const char *fname, amscimglib4_image *img)
AMSCIMGLIB4_API void amscimglib4_readimage_jpeg(const char *fname, amscimglib4_image *img)
{
int rc, i, j;
@ -135,7 +135,7 @@ void amscimglib4_readimage_jpeg(const char *fname, amscimglib4_image *img)
}
void amscimglib4_writeimage_jpeg(const char *fname, amscimglib4_image *img, int quality)
AMSCIMGLIB4_API void amscimglib4_writeimage_jpeg(const char *fname, amscimglib4_image *img, int quality)
{
int I,J;
unsigned char *jpg_buffer; //points to a large array of RGBRGBRGB data

View File

@ -36,7 +36,7 @@ extern "C" {
void amscimglib4_readimage_png(const char *fname, amscimglib4_image *img)
AMSCIMGLIB4_API void amscimglib4_readimage_png(const char *fname, amscimglib4_image *img)
{
int I,J;
//FILE *fp;
@ -115,7 +115,7 @@ void amscimglib4_readimage_png(const char *fname, amscimglib4_image *img)
return;
}
void amscimglib4_writeimage_png(const char *fname, amscimglib4_image *img)
AMSCIMGLIB4_API void amscimglib4_writeimage_png(const char *fname, amscimglib4_image *img)
{
png_image image;

View File

@ -15,6 +15,60 @@ unsigned int amscimglib4_filesize(FILE *fp)
return ret;
}
AMSCIMGLIB4_API int amscimglib4_magic_type(const char *fname)
{
FILE *fp = NULL;
int ret = amscimglib4_type_unknown; //unidentified type
unsigned char magicbuff[8];
fp = fopen(fname,"rb");
if(fp==NULL)
{
printf("amscimglib4magic_type: %s could not be opened!\n",fname);
}
else
{
fseek(fp,0L,SEEK_SET);
fread(magicbuff,8,1,fp);
fseek(fp,0L,SEEK_SET);
//is this file one of PNG, BMP, or JPEG?
if(magicbuff[0] == 'B' && magicbuff[1] == 'M')
{
ret = amscimglib4_type_bmp; //BMP
}
if(magicbuff[0] == 0x89 &&
magicbuff[1] == 0x50 &&
magicbuff[2] == 0x4E &&
magicbuff[3] == 0x47 &&
magicbuff[4] == 0x0D &&
magicbuff[5] == 0x0A &&
magicbuff[6] == 0x1A &&
magicbuff[7] == 0x0A
)
{
ret = amscimglib4_type_png; //PNG
}
if(magicbuff[0] == 0xFF &&
magicbuff[1] == 0xD8 &&
magicbuff[2] == 0xFF &&
(magicbuff[3]==0xDB || magicbuff[3]==0xE0 || magicbuff[3]==0xE1)
)
{
ret = amscimglib4_type_jpg; //JPG
}
fclose(fp);
}
return ret;
}
#ifdef __cplusplus
}; //end extern "C"
#endif