Comment utiliser fread pour remplire 1tableau dynamique
Bonjour
je m'y connais pas trop dans l'allocation dynamique, mais j'en ai besoin pour allouer une grande taille de données.
j'ai une image Tiff de grande taille, je veux la charger dans une matrice dynamique ( vu qu'avec la statique les grande tailles c'est pas possible)
enfin bref je veux utiliser fread successivement afin de lire la premiere ligne (12000 premiers bytes ou 6000 Word) ensuite je la réutilise pour la deuxieme ligne et ainsi de suite.
je sais que ca se fait mais je sais pas le aire, et en plus je ne sais pas si fread prend en compte les matrices, ou elle charge uniquement dans des vecteurs?
pour le moment mon programme ressemble a ça
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
| //Déclaration
const T=6000;
Word** ptr=new Word*[T]; //j'utilise Word car les données sont codées sur 16bits
for(int i=0;i<T;i++) //allocation dynamique de ptr le pointeur que je vais utiliser dans fread
ptr[T] = new Word[T];
Word ** Matrice=new Word*[T];
for(int i=0;i<T;i++) //allocation dynamique de la matrice qui va contenir l'image
Matrice[T] = new Word[T];
//Routine d'ouverture
if(OpenDialog1->Execute())
{
FILE *fichier1 = fopen (Form2->OpenDialog1->FileName.c_str(), "rb") ;
if (!fichier1){
ShowMessage ("Impossible d'ouvrir le fichier\n" +Form2->OpenDialog1->FileName);
return ;
}
fread (ptr,T, T, fichier1); // là je me demande si il va me charger 6000 ligne et 6000 colonne dans la matrice ptr
for (int j=0; j<T; j++)
for (int i=0; i<T; i++)
{
Matrice[i][j]= ptr[i][j];
if (Matrice[i][j] > 255) Matrice[i][j]=255; //Seuillage à la valeur maximale
if (Matrice[i][j] < 0) Matrice[i][j]=0; //Seuillage à la valeur minimale
Form2->Image1->Canvas->Pixels[i][j]= //Affichage de l'image
TColor (RGB(Matrice[i][j],Matrice[i][j],Matrice[i][j]));
}
} |
mais à l'exécution sur la ligne Matrice[i][j]= ptr[i][j]; il me fait une erreur : "le projet a provoqué une classe d'exception avec le message débordement de pile"
alors correction please et merci d'avance pour votre aide