Bonjour à tous.

Alors voila je travaille avec C++ Builde, et mes objectifs étaient de pouvoir récupérer les dimensions en pixels d'une image .tiff (cette partie là a bien fonctionné).

Pour ce faire j'ai téléchargé et utilisé la librairie FreeImage, en accès libre sur le net.

La deuxième partie de mon problème est qu'il faut que j'arrive à mettre le .tif dans un TBitmap pour pouvoir l'afficher, j'ai réussi en partie à le faire, voici le code de ma fonction qui me permet d'y arriver :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
//------------------------------------------------
__fastcall TTiff :: TTiff(String nom_fichier)
{
DWORD toto;
// On regarde si le fichier existe
 
if(FileExists(nom_fichier))
{
// Création de deux objets :
// Le pointeur sur un FreeImage Bitmap dib, dans lequel on charge le .tiff
// Un HBITMAP qui va être un handle (ie pour moi un propriétaire sur l'image que l'on vient de charger)
// Paramètre de la fonction utilisée :
// - un identifiant du type d'image que l'on souhaite charger
// - le nom du fichier (!! chaîne de caractères constante)
// - un entier pour spécifier le type de chargement
// ici default pour nous, pour charger directement le .tiff
 
FreeImage_Initialise();
 
FIBITMAP * dib = FreeImage_Load(FIF_TIFF,nom_fichier.c_str(),TIFF_DEFAULT);
 
//ShowMessage(IntToStr(FreeImage_GetWidth(dib)));
 
HBITMAP bitmap;
// Si le pointeur n'est pas null
 
if(dib != NULL)
{
//Création du Handle du Bitmap, en utilisant une fonction qui nous permet de réobtenir (sans les dénaturer) des infos sur l'image charger
bitmap = CreateDIBitmap(GetDC(NULL),FreeImage_GetInfoHeader(dib),CBM_INIT,FreeImage_GetBits(dib),FreeImage_GetInfo(dib),DIB_RGB_COLORS);
toto = GetLastError();
 
if(toto == 8)
{
ShowMessage("Full");
}
else
this->Handle = bitmap;
}
else
//ShowMessage("merde !!");
 
// Libération du pointeur
FreeImage_Unload(dib);
FreeImage_DeInitialise();
}
else
ShowMessage("Le fichier .tiff n'existe pas");
}
 
//-----------------------------------------------
La classe TTiff étant en héritage vis à vis de TBitMap, le souci vient du fait que la fonction bitmap = CreateDIBitmap(GetDC(NULL),FreeImage_GetInfoHeader(dib),CBM_INIT,FreeImage_GetBits(dib),FreeImage_GetInfo(dib),DIB_RGB_COLORS);, renvoie un code d'erreur quand l'image à traiter est trop volumineuse (ce qui est le cas car les .tiff que j'ai à traiter font plus de 50Mo), donc voila j'aimerais avoir vos suggestions pour contourner ce problème, sachant que je préfèrerai éviter de télécharger une nouvelle librairie, mais peut etre que dans ce cas présent l'utilisation de ScanLine serait judicieuse ?

J'attends vos suggestions, merci d'avance .