Libérer une ressource sous GDI+ [Résolu]

franco82 8 Messages postés mardi 23 novembre 2004Date d'inscription 4 décembre 2006 Dernière intervention - 28 nov. 2006 à 16:46 - Dernière réponse : yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention
- 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!!!
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 29 nov. 2006 à 18:55
3
Merci
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.

Merci yann_lo_san 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de yann_lo_san
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 28 nov. 2006 à 18:33
0
Merci
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);
Commenter la réponse de yann_lo_san
franco82 8 Messages postés mardi 23 novembre 2004Date d'inscription 4 décembre 2006 Dernière intervention - 29 nov. 2006 à 09:05
0
Merci
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....
Commenter la réponse de franco82
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 29 nov. 2006 à 15:38
0
Merci
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.
Commenter la réponse de yann_lo_san
franco82 8 Messages postés mardi 23 novembre 2004Date d'inscription 4 décembre 2006 Dernière intervention - 29 nov. 2006 à 17:52
0
Merci
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
Commenter la réponse de franco82

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.