Si je peux me permettre de petites précisions sur le Canvas, Bitmap... d'un TImage :
Un TImage utilise en interne un bitmap qui lui sert de "mémorisation" de ce qu'il doit afficher sur son propre Canvas.
Lorsqu'on assigne une image à la propriété Picture, ce bitmap est automatiquement créé si l'on utilise une des 3 méthodes :
- Evidemment, en assignant dans l'EDI
- Image1.Picture.Loadfromfile('fichier.bmp')
- Image1.Picture.Assign(monbitmap)
Si on n'assigne pas d'image à la propriété Picture, le bitmap interne est automatiquement créé dès que l'on dessine sur le Canvas du TImage. (Image1.Canvas.Ellipse...). Le bitmap est créé à la taille actuelle du TIMage.
Si on n'assigne pas d'image à la propriété Picture, le code suivant ne peut pas marcher :
Image1.Picture.Bitmap.Canvas.Draw(0,0,bmp);
Et pour cause, car Picture ne contient pas encore de bitmap.
Par contre, ceci marche :
Image1.Canvas.Draw(0,0,bmp);
L'utilisation du Canvas de TImage entraine création du bitmap interne. Si mes souvenirs sont bons, lorsque le Canvas de TImage est modifié, il y a appel à la fonction PictureChanged (qui actualise le bitmap).
On peut donc aussi dessiner sur le Canvas de l'image et ce dessin sera repris lors du SaveToFile de TPicture.Graphic
Mais ceci n'est valable que si on est en dehors de l'événement OnPaint du TImage. Tout ce qui est dessiné dans cet événement n'affecte pas le bitmap interne ! On parle "d'aire volatile".
Cordialement
Thierry
PS: Veuillez excuser mon ton peut-être un peu professoral.
EDIT : voir post de correction
Partager