DLL de chargement des images RAW issues des appareils numeriques


Le code a été adapté de celui trouvé sur le web et écrit par D.Coffin

http://www.cybercom.net/~dcoffin/dcraw/

Il a aboutit a l'écriture d'une DLL (ou librairie) nommée :

load_apn.dll

Pour charger cette DLL, cliquez ici, installez la dans le meme répertoire où est installé le programme qui va l'utiliser.

La suite du texte s'adresse au programmeurs :

La fonction qui est exportée par la DLL a pour nom load_cfa, elle permet de charger le fichier RAW d'un appariel numérique du disque vers la memoire du PC, sous forme decompressée.

En delphi 4/5/6/7 : voici la facon d'appeller cette fonction :

function load_cfa(Filename:Pchar;Var ImageP:Pointer;Var Sx,Sy:Integer):Integer; stdcall;

stdcall est indispensable, c'est le mode de passage des parametres vers cette procedure.

ex : error := load_cfa(Pchar('test.crw'),Image,Sx,Sy);

La fonction retourne soit un succes où :

error=LoadRaw_NO_ERROR

ou

error=LoadRaw_UNSUPPORTED_FORMAT
error=LoadRaw_UNSUPPORTED_COMPRESSION
error=LoadRaw_NOT_SUPPORTED_FILE
error=LoadRaw_CANNOT_USE_WHITE_BALANCE
error=LoadRaw_FILE_NOT_FOUND
error=LoadRaw_FILE_TYPE_UNK
error=LoadRaw_ALLOC_ERROR

Entrée :
Filename : est le nom complet de fichier avec le chemin et l'extension .

Sorties :
ImageP
: est un pointeur qui contient les données de l'image, la DLL s'occupe d'allouer l'espace mémoire necessaire à cette image soit Sx*Sy*2 octets, soit deux octets par pixels, chaque pixel est codé sur 16 bits non signés
Sx: est largeur de l'image en pixel
Sy: est hauteur de l'image en pixel

L'image chargée est sur un seul plan en noir et blanc, "affectée" de la matrice de Bayer couleur, la DLL ne prend pas en charge la reconstrucution des trois plans couleur RGB, ni des miroirs en X ou Y necessaires.

en C:

Voici la declaration en C

int load_cfa(char *name_in,int *imagepointer,int *sizex,int *sizey)

et l'erreur retournée si necessaire, les significations sont les meme qu'en Delphi.

#define LoadRaw_NO_ERROR 0
#define LoadRaw_UNSUPPORTED_FORMAT 1
#define LoadRaw_UNSUPPORTED_COMPRESSION 2
#define LoadRaw_NOT_SUPPORTED_FILE 3
#define LoadRaw_CANNOT_USE_WHITE_BALANCE 4
#define LoadRaw_FILE_NOT_FOUND 5
#define LoadRaw_FILE_TYPE_UNK 6
#define LoadRaw_ALLOC_ERROR 7

Voici le code source du projet écrit en Visual C++ 6 :

Charger ici

Toute amélioriation est la bienvenue.

Voici ici les cameras supportées (à essayer) :