Bonjour tout le monde,

je suis en train d'implémenter un filtre source DirectShow en C++/MC++/C# et j'ai un problème avec des bitmaps.

Voici le scénario : j'ai une classe qui périodiquement appelle une méthode qui va lire des bitmaps se trouvant sur le disque dur. Cette classe appelle cette méthode en passant un pointeur int. (Impossible de passer un pointeur Bitmap, car la classe est définie en C++ et la méthode qui est appelée est définie en C#, donc incompatibilité System.Drawing Gdiplus...)

Ce pointeur je l'utilise pour créer un bitmap comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
   System.IntPtr a = new System.IntPtr(_buf);
   Bitmap b = new Bitmap(714, 481, _stride, System.Drawing.Imaging.PixelFormat.Format32bppRgb, a);
   Graphics grphcsObj = Graphics.FromImage(b);
où _buf et le pointeur int que je passe à la méthode implémenté en C#.

Pour charger le bitmap du disque dur je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
   Bitmap bc = new Bitmap("I:\frame_000000.bmp");
Après ce que j'aimerais faire c'est copier le contenu de l'image que je viens de charger du disque dur dans l'image que j'ai créé en utilisant le pointeur int.

Je fais comme suis, mais ça ne m'affiche rien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
   Graphics grphcsObj = Graphics.FromImage(b);
   grphcsObj.ScaleTransform(1.0f, -1.0f);
   grphcsObj.TranslateTransform(0, bc.Height, System.Drawing.Drawing2D.MatrixOrder.Append);
 
   grphcsObj.DrawImage(bc, 0, 0, 714, 481);
Evidemment, puisqu'il s'agit d'une méthode qui est appelée très souvent j'utilise dispose pour chaque élément alloué, mais là une exception est levée :
"An unhandled exception of type 'System.InvalidOperationException' occurred in system.drawing.dll
Additional information: L'objet est actuellement utilisé ailleurs."

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
  bc.Dispose();
  grphcsObj.Dispose();
  b.Dispose();
Est-ce que quelqu'un peut me dire quelle est la niaiserie que je suis en train de commettre? Ou la meilleure façon de faire pour copier le contenu d'un bitmap (ou image quelconque : jpeg, png....) dans un bitmap crée à l'aide d'un System.IntPr?

Merci beaucoup d'avance pour tout aide fournie et bonne fin d'année à tous/toutes,

JC