Salut,
Des variables non utilisées tu ne déclarera pas.
A quoi sert ton vDataType ?
A quoi sert ton vType ?
Vu que bounds ne te sert que pour vDataType, tu peux le virer aussi.
Tu récupère un pointeur sur ton "tableau" avec SafeArrayAccessData.
Puis tu le recopies dans buffer.
Puis tu le recopies dans TabPix.
Tu à l'air de penser que tu manipule un tableau de 640 * 480 * 3 octets = 921600 octets.
Recopier 921600 octets, ça prend du temps non négligeable, même sur un pentium cinquante douze.
Autant memcopy est vaguement optimisé (Va certaiment copier le tableau
32 bits par 32 bits), autant ta deuxième recopie doit prendre au bas
mot 4 ou cinqs front d'horloges processeurs par octets (Copie RAM ->
registre, registre -> RAM, calculs des offsets, saut de boucle...)
Tout ça juste pour du vent.
T'embête pas à faire des copies !

Dans ton MP, tu me dis "Lorsque j'ai mis l'argument à 0 elle m'a fait
un jpeg et lorsque j'ai mis à 1, c'était un bitmap". Là tu as mis 0.
Une Bitmap, c'est pas un bête tableau de pixels. Si tu ouvre une bitmap
avec le bloc note, tu vas contater que les deux premiers caractères
sont BM. Ces deux caractère font partie de l'entête du fichier bitmap.
Les fichiers bitmaps ont une succession d'entêtes avant les pixels (Qui
précisent la taille de la bitmap, sont type de compression, son nombre
de bytes par pixels...), et ont parfois aussi une pallette.
Je suis pas devin et je sais pas si GetCurrentImage renvoie une bitmap
ou un tableau de pixel... Je te mets simplement en garde que tu devrais
t'assurer de ce qu'elle te renvoies (D'où l'utilité du source de
mon MP).
Concernant ton erreur, tu devrais vérifier que GetCurrentImage te renvoie bien un tableau, et pas un VARIANT ne contenant rien.
m_AMC.GetCurrentImage(0 ou 1, &Tampon, &LongueurTampon);
if ((Tampon.vt & VT_ARRAY) != VT_ARRAY)
MessageBox("Echec de la récupération de l'image");
3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08