2 votes

Comment convertir un BYTE* en un objet image gdi+ ?

Je veux convertir un BYTE* en un objet Image gdi+.

Comment faire ?

Le BYTE* semble être un point Dib.

J'ai trouvé que Image avait une méthode nommée Image::FromStream() qui pourrait aider, Mais je ne trouve aucune référence sur la façon de convertir un BYTE* en un objet IStream. Comment faire ?

Merci d'avance !

En fait, il est difficile de croire que MS fournit une interface IStream, mais ne fournit aucune classe MemoryStream c++ qui implémente l'interface.

2voto

Roger Lipscombe Points 34344

CreateStreamOnHGlobal prend un HGLOBAL et vous donne un pointeur IStream. Vous devrez allouer suffisamment de mémoire avec GlobalAlloc, puis copier votre tableau de BYTE dans la HGLOBAL.

Si vous savez que les données de l'image que vous avez sont des DIB GDI, vous pouvez utiliser GdipCreateBitmapFromGdiDib ou le constructeur Bitmap::Bitmap correspondant.

0voto

unwind Points 181987

Connaissez-vous le format des données de l'image ? BYTE pointe sur ? Pour qu'Image puisse se construire à partir d'un flux, les données doivent être dans l'un des formats d'image standard pris en charge (GIF, PNG, JPEG, etc.).

En Flux de données (IStream) semble assez simple à mettre en œuvre par soi-même, s'il n'y a pas de "flux de mémoire" approprié ou quelque chose de similaire.

0voto

SneezeFor16Min Points 113

Utilisation SHCreateMemStream ,

IStream* stream = ::SHCreateMemStream({your BYTE array}, {size of the array});
Gdiplus::Image *img = Gdiplus::Image::FromStream(stream);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X