Transfert de Bitmap

Résolu
cs_kinay Messages postés 20 Date d'inscription samedi 30 août 2003 Statut Membre Dernière intervention 18 février 2008 - 19 juil. 2007 à 11:19
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 - 19 juil. 2007 à 14:34
J'ai un tableau de Bitmap contenant chacun des 'fichiers BMP',
TTableau = array [1..10] of TBitmap
MonTab : TTaBleau

Les bitmap sont ensuite chargé par un loadfromfile

Sur ma Form, j'ai un TImage (MonImage), mais lorque je veux faire par exemple

MonImage.canvas.draw(50,50,MonTab[5])

j'ai une erreur 'Adress violoation at address 000000000'

Merci d'avance pour votre aide

7 réponses

florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
19 juil. 2007 à 12:59
Enlève donc le Partie.free !!!!!
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
19 juil. 2007 à 11:29
Salut,

Essaye comme ceci :

MonImage.Picture.assign(MonTab[5]);

 
@+
Cirec

<hr size="2" />
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
19 juil. 2007 à 12:09
Salut !

Es-tu sûr d'avoir bien rempli ton tableau de bitmaps avant de t'en servir.
Fais un Assert(Assigned(monTab[5]), 'Bitmap non assigné') avant ta ligne qui plante et si tu as une erreur, c'est que tu n'a spas initialisé correctement tes bitmaps.

Sinon, tu peux aussi nous poster le code de remplissage, histoire qu'on y jette un oeil.

++
0
cs_kinay Messages postés 20 Date d'inscription samedi 30 août 2003 Statut Membre Dernière intervention 18 février 2008
19 juil. 2007 à 12:44
Merci pour vos réponses :
J'ai déjà essayer le assign : sans succès
Pour le assert : je n'ai pas d'erreur

Voici mon source de remplissage. L'idée est la suivante :
J'ai un fichier BMP qui contient 52 cartes, je les découpe pour les mettre dans des BMP

Type
TCarte = record
    cou : integer;
    Val : integer;
    Img : TBitmap;
end;
TTalon = record
    Cartes : Array [1..110] of TCarte;
    Rang : integer
end;

Talon : TTalon

Procedure ....
begin
   r:=1;
   Image:=TBitmap.create;
   Image.LoadFromFile('E:\\cartes.bmp'); // Ce fichier contient 52 Cartes

   for c:=1 to 4 do
   begin
      for v:=1 to 13 do
      begin

         R1:=Rect(1,1,71,96);
         R2:=rect(1,1+(r-1)*96,71,r*96);
         Partie:=TBitmap.create;
         Partie.Width:=71; Partie.Height:=96;
         PArtie.canvas.CopyRect(R1,Image.Canvas,R2);
         Talon.Cartes[r].img:=Partie;
         Partie.free;
         r:=r+1;
      end;
   end;
   Talon.Rang:=1;
   Image.Free;
end;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
19 juil. 2007 à 13:04
Enfin... ça signifie donc qu'il faudra créer une procédure chargée de les libérer, ces bitmaps, dans le OnDestroy par exemple.
0
cs_kinay Messages postés 20 Date d'inscription samedi 30 août 2003 Statut Membre Dernière intervention 18 février 2008
19 juil. 2007 à 14:00
Effectivement, en enlevant le Partie.free, cela fonctionne.

Peux-tu me donner une explication :
Quand je fais 'Talon.Cartes[r].img:=Partie;', je ne créé pas une copie de Partie, mais je pointe vers Partie. Est-ce Bien ça.

En tout cas, Merci beaucoup
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
19 juil. 2007 à 14:34
Oui tout à fait.
Les objets sont affectés, non assignés. Cela signifie que "Talon.Cartes[r].img:=Partie" ne fait en réalité qu'une copie de pointeur. Après, si tu modifies Partie, cela revient à modifier Talon.Cartes[r].img

N'oublies surtout pas la destruction !

++
0
Rejoignez-nous