Libérer une ressource sous GDI+

Résolu
franco82 Messages postés 8 Date d'inscription mardi 23 novembre 2004 Statut Membre Dernière intervention 4 décembre 2006 - 28 nov. 2006 à 16:46
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 29 nov. 2006 à 18:55
bonjour à tous,

je suis dans une panade pas possible, je cherche à afficher une image dans ma fenetre hWnd mais dès que je lance une nouvelle acquisition jaimerais que celle ci se rafraichissse dans la fenetre....

j'utilise donc GDI+, le problème que je rencontre surviens justement lors du rafraichissement!Ma ressource étant utilisé popur l'affichage, il m'est impossible de l'ecrasser pour la remplacer et donc l'afficher.....

si quelqun pouvait m'apporter sa lueur!!!

5 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
29 nov. 2006 à 18:55
Dispose est appelée directement par delete image1 (destructeur)
Je ne vois pas ou est la difficultée, tu peux aussi cloner ton image de base (Clone) pour travailler dessus.
Si Image image1 est une globale il suffit dans menu aquistion de faire un :
if (image1) delete image1;
image1 = new Image(nouvelle_image); //ect... elle est écrasée.
3
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
28 nov. 2006 à 18:33
Gdi+ est l'une des libs grahique les plus simple.

// un wrapper DC
Graphics grPanel(hdc);

// une image de n'importe quelle extension
Bitmap img(L"uneImage.bmp");

// dessine
grPanel.DrawImage(&img, 0, 0, img.GetWidth(), img.GetHeight());

// Si le hdc correspond a ta fenetre HWND et tout ça est mis dans WM_PAINT, il te suffit pour raffraichir d'un
InvalidateRect(hWnd, NULL);
0
franco82 Messages postés 8 Date d'inscription mardi 23 novembre 2004 Statut Membre Dernière intervention 4 décembre 2006
29 nov. 2006 à 09:05
ok

merci ,

mais le souci c'est que invalidate rect prend trois argument et pas deux, à moins que tu est rippé sur le clavier et oublier le troisième argument!!

pour ce qui est du code je suyis d'accord , c'est exactement ce que j'ai ecrit mais le souci c'est de libérer ma ressource en loccurence l'image "UneImage.bmp", dans mon code cette image est générer lors d'un acquisition camera e le souci c'est que ne réécit pas sur cette ilmage (je pense que c'est à cause de l'affichage!)

donc voila le souci l'affichage c'est dejà bon....
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
29 nov. 2006 à 15:38
Aï, je commence à comprendre, tu veux retranscrire un flux video en bitmap avec un timer je suppose !
Avec 10 lignes de code et DirectShow, tu peux créer un flux vidéo qui fera tout le travail vers un HWND ! Et avec une réelle animation temps réel. Mais bon, j'ai peut etre mal compris.
Bonne continuation.
0

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

Posez votre question
franco82 Messages postés 8 Date d'inscription mardi 23 novembre 2004 Statut Membre Dernière intervention 4 décembre 2006
29 nov. 2006 à 17:52
alors enfait je vais essayer d'etre plus precis!!!

jai ma camera elle realise une acquisition lorsque je choisit une "acquisition simple".

une fois l'acquisition realisée , je retranscrit l'image en fichier .png!(jusque là tout fonctionne)

c'est une fois que je l'affiche dans ma fenetre que c'est la merde. En fait je cré une varible de type Bitmap

avec la ligne suivante :





image1=new Bitmap(L"acq0.png");





je l'affiche ensuite dans ma fenetre en definissant la zone cliente





InvalidateRect(...






Le souci, c'est que une fois afficher , je souhaite réaliser des traitement (par la suite, ce n'est pas ma priorité!!). Ceux ci terminés, je souhaite refaire une acquisition en cliquant à nouveau sur l'item de mon menu et donc réafficher l'image...










PROBLEME!!!!!

MA NOUVELLE IMAGE EST CREE AVEC LE MEME NOM QUE LA PRECEDENTE. MALHEURESEMENT, TANT QUE LA RESSOURCE "image1" N'EST PAS LIBEREE, JE NE PEUT PAS SUPPRIMER MON IMAGE "acq.png" ET JE NE PEUT PAS RE-ECRIRE PAR DESSUS...ELLE  EST VEROUILLEE!!!






ja'ai donc essayer et jessai toujours de liberer cette ressource.Mais en lisant la MSDN2 de microsoft on y trouve ceci:

[URL]http://msdn2.microsoft.com/fr-fr/library/system.drawing.bitmap_members(VS.80).aspx/URL

c'est censer etre la liste des fonction et propriété menbre de la class Bitmap...

lorsque je rentre le code suivant dans mon appli.




image1->Dispose();




Il me repond bien gentillement :


" error C2039 :  'Dispose'  : is not a member of Bitmap" puis la ligne suivante "see the declaration of 'Bitmap'

je crois avoir besoin d'un leger coup de main...

merci
0
Rejoignez-nous