Je suis en train de créer dynamiquement une image bitmap en utilisant tableau d'octets en utilisant le code suivantC#: Bitmap Création en octets tableau
Bitmap GetImage()
{
IntPtr ip = Marshal.AllocCoTaskMem(imagesize);
//some code to fill ip
Image img = new Bitmap(
w,
h,
-stride,
PixelFormat.Format24bppRgb,
(IntPtr)(ip.ToInt32() + imagesize - stride)
);
Marshal.FreeCoTaskMem(ip); // Comment this line to work
return img;
}
void SaveImage()
{
Image img = GetImage();
img.save("test.bmp"); // This call fails
img.Dispose();
}
Maintenant, mon problème est que je veux retourner un Bitmap, mais en même temps je ne » Je ne veux pas que le pointeur IP reste tel que la mémoire allouée fuit. Il n'est jamais libéré. Comment puis-je retourner une image créée avec un tableau bytes et sans déranger l'appelant de la fonction GetImage() pour libérer de la mémoire.
Je reçois les données d'un tampon non géré qui n'est rien d'autre que DirectX SampleGrabber Filter c'est la raison pour laquelle j'utilise AllocCoTaskMem – Ankit
Assez bien :) J'espère que cela fonctionne pour vous. Faites-moi savoir si vous avez besoin d'un échantillon plus complet. –
Vous n'avez pas besoin de créer un objet Graphics intermédiaire, créez simplement une nouvelle instance Bitmap avec l'occurrence Bitmap d'origine dans le constructeur. – bsneeze