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 :
où _buf et le pointeur int que je passe à la méthode implémenté en C#.
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);
Pour charger le bitmap du disque dur je fais :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Bitmap bc = new Bitmap("I:\frame_000000.bmp");
Je fais comme suis, mais ça ne m'affiche rien :
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 :
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);
"An unhandled exception of type 'System.InvalidOperationException' occurred in system.drawing.dll
Additional information: L'objet est actuellement utilisé ailleurs."
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?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 bc.Dispose(); grphcsObj.Dispose(); b.Dispose();
Merci beaucoup d'avance pour tout aide fournie et bonne fin d'année à tous/toutes,
JC
Partager