Enregistrer toutes les Timage

trollnumber1 Messages postés 12 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 28 avril 2003 - 30 mars 2003 à 22:00
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 - 1 avril 2003 à 12:34
Troll 8-)

Je veux Enregistrer toutes mes Timages d'un fiche dans un fichier avec les hints et l'emplacement sur la fiche.

Et de pouvoir aller les chercher dans le fichier quand je né besoin.

1 réponse

cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
1 avril 2003 à 12:34
Tu fais une boucle avec Components[i] et ComponentCount, en vérifiant si le composant i est une image ou pas... Tu utilise SaveToFile de ton Timage si c'en est une, et pis voilà !
[Citation de la réponse que je t'avais déjà faite... Il faut continuer sur la même chaine de messages !]

Bon... Vu les infos que tu veux sauvegarder, le principe est là pour repérer les TImage, mais à l'enregistrement, c'est différent...

Je pense que "le mieux" (ce n'est peut-être pas le mieux, mais c'est la meilleure idée qui me vient à l'esprit !) est de faire comme suis :
Tu crées un record du genre
type  
  TinfImage = Packed Record
    hint: String[255]; //il faut que la taille soit bien définie !
    Left: Integer;
    Top: Integer;
    Taille: Integer; //Pour stocker la taille des données de l'image
  end;


Avant l'enregistrement, tu ouvres ton fichier de sauvegarde avec un TFileStream...

Ensuite, dans la boucle dont je t'ai parlé auparavant, tu fais ainsi :
1-Tu crées un TMemoryStream dans lequel tu enregistres l'image "i" avec sa méthode SaveToStream...
2-Avec une variable de type TinfImage (déclarée, bien sûr !!) tu enregistres les infos de l'image... Hint, Position (X,Y) et la taille, que tu obtiens avec ton MemoryStream (propriété size !)...
3-Tu sauvegardes ces infos : FileStream.Write(infImage)
4-Tu sauvegardes ensuite l'image... Utilises pour cela la méthode la plus rapide, c'est à dire FileStream.CopyFrom(MemoryStream, 0);
5-Tu libères le MemoryStream...
6-Ta boucle est finie, elle devra recommencer pour chaque Timage...
7-Après ta boucle, il faut stocker à la fin du fichier le nombre d'images enregistrées... Un integer voire même un byte devrait suffire !
8-Tu libères ton FileStream

Voilà pour l'enregistrement !

Pour la lecture, il faut également faire un boucle, en ouvrant ton fichier de sauvegarde... Tu te rends à la fin de celui-ci et tu récupères le nombre d'itérations à effectuer par la boucle (qui correspond donc au nombre d'images enregistrées !).
Après, tu lis à chaque fois une entête infImage, qui te permet de créer un Timage, de la placer et de le remplir, en lisant Taille octets derrière l'entête...

Voilà voilà !!
Si tu as besoin de plus de précisions, n'hésiet pas à demander au cas où je n'ai pas été assez clair !

Bonne prog' !
[mailto:bestiol@cario.fr Bestiol.]
0
Rejoignez-nous