Como primer paso, para comprobar si un archivo es PNG, hay que inspeccionar el offset 0 del archivo y comprobar la firma (signature). Si concuerdan, podemos decir que es un archivo PNG.
----------------------------------
static char *PNGsignature = {0x89,"PNG",0x0D,0x0A,0x1A,0x0A};
#define signatureLength 8
void isPNG(void *signaturePtr)
{
cmp(PNGsignature, &signaturePtr, signatureLength) ? (return true) : (return false);
}