Problème de traitement d'image tiff
J'utilise une FileListBox. Ca tout est normal.
Mais j'utilise un compteur qui pointe sur les fichiers dans le dossier ouvert dans cette FileListBox, qui sont dans ce cas, des images tiff., Pour les ouvrir, je dois utiliser la librairie GraphicEx.
Code:
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
|
//Extraction de l'extension du fichier image ouvert
FileExt1 = ExtractFileExt(FileName1);
//Traitement des images JPEG
if ((FileExt1 == ".jpeg")||(FileExt1 == ".jpg")||(FileExt1 == ".JPEG")||(FileExt1 == ".JPG"))
{
TxtExt->Caption = "*.jpeg";
Graphics::TBitmap *bmp = new Graphics::TBitmap();
TJPEGImage *jpg = new TJPEGImage();
jpg->LoadFromFile(FileName1);
bmp->Assign(jpg);
//Affichage a l'écran de l'image ouverte
Image1->Picture->Assign(bmp);
delete bmp;
delete jpg;
}
//Traitement des images TIFF
else if ((FileExt1 == ".tiff")||(FileExt1 == ".tif")||(FileExt1 == ".TIFF")||(FileExt1 == ".TIF"))
{
TxtExt->Caption = "*.tiff";
Graphics::TBitmap * bmp = new Graphics::TBitmap();
Graphicex::TTIFFGraphic * tiff = new Graphicex::TTIFFGraphic();
tiff->LoadFromFile(FileName1);
bmp->Assign(tiff);
//Affichage a l'écran de l'image ouverte
Image1->Picture->Assign(bmp);
delete bmp;
delete tiff;
}
//Traitement des images Bitmap
else if ((FileExt1 == ".bmp")||(FileExt1 == ".BMP"))
{
TxtExt->Caption = "*.bmp";
//Affichage a l'écran de l'image ouverte
Image1->Picture->LoadFromFile(FileName1);
} |
Apres, je fait un traitement de l'image, mais dans le cas d'une image en tiff, le traitement ne se déroule pas comme je le voudrais (alors que dans un autre programme, j'ai le même code, et qui fonctionne)
Code:
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
|
//Analyse image
for (int y = 0; y < HeightImage1; y++)
{
ProgressBar1->Position++;
for (int x = 0; x < WidthImage1; x++)
{
//Mise en mémoire des données de l'image
Main->intensite->image1[x][y] = Image1->Canvas->Pixels[x][y];
//Conversion des données en hexadecimal
AnsiString ValCouleur1 = IntToHex(Main->intensite->image1[x][y],6);
//Decomposition par couleur
AnsiString ValBleu1 = ValCouleur1.SubString(1,2);
AnsiString ValVert1 = ValCouleur1.SubString(3,2);
AnsiString ValRouge1 = ValCouleur1.SubString(5,2);
//Ajout des caractères "0x" devant le chiffre hexadecimal
AnsiString HexBleu1 = "0x" + ValBleu1;
AnsiString HexVert1 = "0x" + ValVert1;
AnsiString HexRouge1 = "0x" + ValRouge1;
//Conversion en decimal
int DecBleu1 = StrToInt(HexBleu1);
int DecVert1 = StrToInt(HexVert1);
int DecRouge1 = StrToInt(HexRouge1);
//Valeur de l'intensité finale
int TotalRVB1 = DecBleu1 + DecVert1 + DecRouge1;
//Mise en mémoire de la valeur trouvée
Main->intensite->image1[x][y] = TotalRVB1;
//Recherche des valeurs extrèmes
if (max1-Main->intensite->image1[x][y]<=0)
{
max1=Main->intensite->image1[x][y];
}
if (min1-Main->intensite->image1[x][y]>=0)
{
min1=Main->intensite->image1[x][y];
}
}
}
TxtInten->Caption = IntToStr(min1) + "/" + IntToStr(max1);
Analyse->Refresh();
Analyse->Caption = "Traitement du fichier" + IntToStr(NumImage + 1) + "/" + IntToStr(Ajout->FileListBox1->Count);
for (int y = 0; y < HeightImage1; y++)
{
ProgressBar2->Position+=1;
for (int x = 0; x < WidthImage1; x++)
{
Main->pourcentage->image1[x][y] = (100*(Main->intensite->image1[x][y] - min1)/(max1 - min1));
Image1->Canvas->Pixels[x][y] = CodeInt[(int)(Main->pourcentage->image1[x][y] * 1021 / 100)];
Main->pourcentage->image1[x][y] = NULL;
Main->intensite->image1[x][y] = NULL;
}
} |
ce code devrai permettre d'en faire sortir l'intensitée de chaque pixelde 0 a 765 et mise en pourcentage de 0 a 100 ensuite