freeimage.h

FreeImage_GetFileType

DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileType(const char *filename, int size FI_DEFAULT(0));

Pide a FreeImage que analice la firma del mapa de bits. La función retorna unas de las constantes predefinidas FREE_IMAGE_FORMAT o un número de identificacion de mapa de bits registrado por un plugin. El parámetro size no se usa actualmente y puede ser 0.

Dado que no todos los formatos pueden ser identificados por su cabecera (algunas imágenes no tienen cabecera o al final del fichero), FreeImage_GetFileType puede retornar FIF_UNKNOWN si no existe un plugin disponible para analizar el fichero. En ese caso, se puede usar FreeImage_GetFIFFromFilename para adivinar el formato del fichero a partir de la extensión del nombre del fichero, pero ésta última función es más lenta y menos precisa.

/** Generic image loader
@param lpszPathName Pointer to the full file name
@param flag Optional load flag constant
@return Returns the loaded dib if successful, returns NULL otherwise
*/
FIBITMAP* GenericLoader(const char* lpszPathName, int flag) {
    FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
    // check the file signature and deduce its format
    // (the second argument is currently not used by FreeImage)
    fif = FreeImage_GetFileType(lpszPathName, 0);
    if(fif == FIF_UNKNOWN) {
        // no signature ?
        // try to guess the file format from the file extension
        fif = FreeImage_GetFIFFromFilename(lpszPathName);
    }
    // check that the plugin has reading capabilities ...
    if((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) {
        // ok, let's load the file
        FIBITMAP *dib = FreeImage_Load(fif, lpszPathName, flag);
        // unless a bad file format, we are done !
        return dib;
    }
    return NULL;
}