Récupérer un bitmap...

cs_Crepuscule3 Messages postés 24 Date d'inscription samedi 13 octobre 2007 Statut Membre Dernière intervention 25 novembre 2008 - 30 nov. 2007 à 18:45
cs_Crepuscule3 Messages postés 24 Date d'inscription samedi 13 octobre 2007 Statut Membre Dernière intervention 25 novembre 2008 - 1 déc. 2007 à 20:06
Bonjour à tous,

   je suis actuellement sur un projet de traitement vidéo. Ce projet avance plutôt mais je reste coincé sur l'acquisition des pixels.
Je viens tout juste de passer une étape. J'ai utilisé une fonction (GetCurrentImage(long the format, VARIANT* Buffer, long* theBufferSize)) qui normalement me permet d'aller chercher une image BMP dans le flux MJPEG de la vidéo. Cette image est normalement stocké dans Buffer.
 Donc voilà, j'ai ma variable Buffer de type VARIANT et la longueur de l'image theBufferSize de type long, mais je ne sais pas comment obtenir à partir de cela, mon image sous la forme d'un tableau à deux dimensions (correspondant aux pixels sur x et y, résolution 640x480).

Quelqu'un aurait-il une suggestion? (ou un exemple de code, ce serait plus facile pour comprendre)

Voici la définition de la structure VARIANT:
-------------------------------------------------------------------------------------------
struct

tagVARIANT

{

union

{

struct __tagVARIANT

{

VARTYPE vt;

WORD wReserved1;

WORD wReserved2;

WORD wReserved3;

union

{

LONGLONG llVal;

LONG lVal;

BYTE bVal;

SHORT iVal;

FLOAT fltVal;

DOUBLE dblVal;

VARIANT_BOOL boolVal;

_VARIANT_BOOL bool;

SCODE scode;

CY cyVal;

DATE date;

BSTR bstrVal;

IUnknown *punkVal;

IDispatch *pdispVal;

SAFEARRAY *parray;

BYTE *pbVal;

SHORT *piVal;

LONG *plVal;

LONGLONG *pllVal;

FLOAT *pfltVal;

DOUBLE *pdblVal;

VARIANT_BOOL *pboolVal;

_VARIANT_BOOL *pbool;

SCODE *pscode;

CY *pcyVal;
DATE *pdate;

BSTR *pbstrVal;

IUnknown **ppunkVal;

IDispatch **ppdispVal;

SAFEARRAY **pparray;

VARIANT *pvarVal;

PVOID byref;

CHAR cVal;

USHORT uiVal;

ULONG ulVal;

ULONGLONG ullVal;

INT intVal;

UINT uintVal;

DECIMAL *pdecVal;

CHAR *pcVal;

USHORT *puiVal;

ULONG *pulVal;

ULONGLONG *pullVal;

INT *pintVal;

UINT *puintVal;

struct __tagBRECORD

{

PVOID pvRecord;

IRecordInfo *pRecInfo;

} __VARIANT_NAME_4;

} __VARIANT_NAME_3;

} __VARIANT_NAME_2;

DECIMAL decVal;

} __VARIANT_NAME_1;

} ;

typedef
VARIANT *LPVARIANT;

typedef
VARIANT VARIANTARG;

typedef
VARIANT *LPVARIANTARG;

2 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
30 nov. 2007 à 22:40
Salut,


Marrant, j'ai comme une sensasion de déjà vu...


Bah tu es sur la bonne piste on dirait. Les variant sont conçus pour
contenir à peu près n'importe quoi. D'après le code VB que j'avais
posté, on peut supposer que ton variant contient un tableau de Byte. Tu
peux le vérifier en faisant des tests sur le champ vt de ton variant.


Genre if (Buffer->vt & VT_ARRAY) alors c'est un tableau.


Quand un variant contient un tableau, il est pointé par parray. Mais l'aide précise qu'il ne faut pas accèder à ce pointeur directement, mais plutôt utiliser les fonctions faîtes pour.


Dans ton cas tu peux par exemple utiliser SafeArrayAccessData
pour récupérer un pointeur sur les données de ton tableau. Puis tu peux
par exemple utiliser CxImage comme je te le proposais pour avoir une
image sur laquelle tu peux travailler. Et ensuite seulement tu pourras
utiliser SafeArrayUnaccessData.

<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08
0
cs_Crepuscule3 Messages postés 24 Date d'inscription samedi 13 octobre 2007 Statut Membre Dernière intervention 25 novembre 2008
1 déc. 2007 à 20:06
Merci pour le coup de main.

   Je n'ai pas eu le temps de me mettre sur ce projet aujourd'hui (beaucoup de boulot en ce moment à la fac), mais j'ai suivit ta piste et il semble que se soit la bonne piste, vu ce que j'ai trouvé comme infos sur la fonction SafeArrayAccessData. Je n'arrive encore pas à la mettre en oeuvre, j'ai quelques problèmes de pointeurs. Par ailleurs, je ne suis pas sûr de mettre en oeuvre les bonnes variables, bien que j'en sois quasiment sûr.

   Je pense que je me mettrais plus sérieusement là dessus demain. Merci encore pour les pistes.
En revanche, si tu as d'autres pistes ou conseils, je suis preneur.

Crepuscule3
0
Rejoignez-nous