OVH Cloud OVH Cloud

opération sur un tableau complet en une seule fois?

38 réponses
Avatar
marc.dufresne
bonjour
on peut faire correspondre deux tableaux ex tablo1()=tablo2()
mais peut on effectuer une opération sur un tableau complet comme du genre:
tablo1()=tablo2()+5 (ajouter 5 à la valeur de chaque élément du tablo2). Je
sais que ce que j'ai écrit n'est pas valable mais y aurait-il un moyen
quelconque? En fait trouver une méthode utra rapide pour changer toutes les
valeurs d'un tableau!

merci d'avance

10 réponses

1 2 3 4
Avatar
X
Bonjour, pour reprendre ton exemple:

dim t1(100)
dim t2(100)
dim i as ong
...on leur donne des valeurs...
for i = 1 to 100
t2(i)=t1(i) + 5
next i

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"marc.dufresne" a écrit dans le
message de news: 44723323$0$8028$
bonjour
on peut faire correspondre deux tableaux ex tablo1()=tablo2()
mais peut on effectuer une opération sur un tableau complet comme du
genre: tablo1()=tablo2()+5 (ajouter 5 à la valeur de chaque élément du
tablo2). Je sais que ce que j'ai écrit n'est pas valable mais y aurait-il
un moyen quelconque? En fait trouver une méthode utra rapide pour changer
toutes les valeurs d'un tableau!

merci d'avance



Avatar
Jean-marc
"marc.dufresne" wrote in message
news:44723323$0$8028$
bonjour
on peut faire correspondre deux tableaux ex tablo1()=tablo2()
mais peut on effectuer une opération sur un tableau complet comme du


genre:
tablo1()=tablo2()+5 (ajouter 5 à la valeur de chaque élément du tablo2).


Je
sais que ce que j'ai écrit n'est pas valable mais y aurait-il un moyen
quelconque? En fait trouver une méthode utra rapide pour changer toutes


les
valeurs d'un tableau!



Hello Marc,

Ce n'est pas possible en VB. Il ya des langages qui permettent
de faire ce genre de traitement, mais pas VB (Lisp, Python, etc.)
Pour des cas particuliers, on peut si ça en vaut la peine écrire
des fonctions dédiées, dans un langage qui permet une manipulation
efficace des données en mémoire. On peut par exemple faire une fonction
qui ajoute une valeur à chaque élément du tableau, comme dans ton exemple.
Coder ceci en C serait simple. Tu peux aussi le faire en VB en jouant
avec les API comme CopyMemory et ce genre de choses.
Si tu as besoin d'une grande vitesse d'exécution, le passage par un langage
bas niveau ou par l'utilisation des API de manipulation mémoire semble
le plus efficace. En fonction de l'opération à effectuer sur le tableau,
il est surement possible de choisir la meilleure méthode.

--
Jean-marc
Avatar
Guy DETIENNE
Salut ;O)

N'oublie pas qu'un tableau par défaut en VB est indicé à 0. Donc ton
exemple ne remplira jamais l'indice 0, seulement 1 à 100.
Si tu désires que l'indice commence à 1, il faut le déclarer explicitement
en en-tête avec l'instruction suivante : Option Base 1 (perso, je ne bosse
jamais ainsi)

Pour évitier cela, utilise LBound et UBound pour connaître les bornes
inférieures et supérieures d'un tableau :
Pour info, LBound et UBound plantent si le tableau n'est pas dimensionné.
Donc il faudra préalablement vérifié sur le tableau est dimensionné en
trappant l'erreur.

For i = LBound(t1) To UBound(t1)
t2(i) = t1(i) + 5
Next i

Guy




"X" a écrit dans le message de
news:
Bonjour, pour reprendre ton exemple:

dim t1(100)
dim t2(100)
dim i as ong
...on leur donne des valeurs...
for i = 1 to 100
t2(i)=t1(i) + 5
next i

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
--------------------------------------------------------------------------


----------
"marc.dufresne" a écrit dans le
message de news: 44723323$0$8028$
> bonjour
> on peut faire correspondre deux tableaux ex tablo1()=tablo2()
> mais peut on effectuer une opération sur un tableau complet comme du
> genre: tablo1()=tablo2()+5 (ajouter 5 à la valeur de chaque élément du
> tablo2). Je sais que ce que j'ai écrit n'est pas valable mais y


aurait-il
> un moyen quelconque? En fait trouver une méthode utra rapide pour


changer
> toutes les valeurs d'un tableau!
>
> merci d'avance
>




Avatar
X
Non Môsieur,

Les objets commence à zéro, et les variables à 1 (sauf ???), voici un
exemple:

Sub Form_Activate()
Dim i As Long
Dim t1(9)
Dim t2(9)
'
For i = 1 To 9
t1(i) = Second(Time) * i
t2(i) = t1(i) + i
Next i
'
List1.Clear
For i = 1 To 9
List1.AddItem i & " = " & Format(t1(i), "000") & " : " & Format(t2(i),
"000")
Next i
End Sub

Les valeurs 1 à 9 son templies
----------------------------------

Mais si je fais:


Sub Form_Activate()
Dim i As Long
Dim t1(9)
Dim t2(9)
'
For i = 0 To 9
t1(i) = Second(Time) * i
t2(i) = t1(i) + i
Next i
'
List1.Clear
For i = 0 To 9
List1.AddItem i & " = " & Format(t1(i), "000") & " : " & Format(t2(i),
"000")
Next i
End Sub

LA VALEUR 0 EST VIDE !!!

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Guy DETIENNE" a écrit dans le message de news:

Salut ;O)

N'oublie pas qu'un tableau par défaut en VB est indicé à 0. Donc ton
exemple ne remplira jamais l'indice 0, seulement 1 à 100.
Si tu désires que l'indice commence à 1, il faut le déclarer explicitement
en en-tête avec l'instruction suivante : Option Base 1 (perso, je ne bosse
jamais ainsi)

Pour évitier cela, utilise LBound et UBound pour connaître les bornes
inférieures et supérieures d'un tableau :
Pour info, LBound et UBound plantent si le tableau n'est pas dimensionné.
Donc il faudra préalablement vérifié sur le tableau est dimensionné en
trappant l'erreur.

For i = LBound(t1) To UBound(t1)
t2(i) = t1(i) + 5
Next i

Guy




"X" a écrit dans le message de
news:
Bonjour, pour reprendre ton exemple:

dim t1(100)
dim t2(100)
dim i as ong
...on leur donne des valeurs...
for i = 1 to 100
t2(i)=t1(i) + 5
next i

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
--------------------------------------------------------------------------


----------
"marc.dufresne" a écrit dans le
message de news: 44723323$0$8028$
> bonjour
> on peut faire correspondre deux tableaux ex tablo1()=tablo2()
> mais peut on effectuer une opération sur un tableau complet comme du
> genre: tablo1()=tablo2()+5 (ajouter 5 à la valeur de chaque élément du
> tablo2). Je sais que ce que j'ai écrit n'est pas valable mais y


aurait-il
> un moyen quelconque? En fait trouver une méthode utra rapide pour


changer
> toutes les valeurs d'un tableau!
>
> merci d'avance
>








Avatar
Patrice Henrio
Bonjour,

A moins d'avoir à utiliser cela un bon million de fois je ne crois pas que
le passage par une fonction en C fera gagner énormément par rapport au
parcours du tableau.
Par contre cela dépend beaucoup de l'opération elle-même.

Par contre, bien entendu, Guy Detienne a raison les tableaux commencent
implicitement à 0 comme il l'indique.
L'exemple suivant

Private Sub Label1_Click()
Dim T(9) As Byte, I As Byte
label1=""
For I = 0 To 9
T(I) = 2 * I + 1
Label1 = Label1 & T(I) & " "
Next I

End Sub

Permettra l'affichage lors du clic sur le label de 1 2 3 5 7 9 11 13 15 17
19 comme on s'y attend ce qui démontre bien que la valeur 0 a été affectée.



"Jean-marc" a écrit dans le message de
news: 4472e958$0$13886$
"marc.dufresne" wrote in message
news:44723323$0$8028$
bonjour
on peut faire correspondre deux tableaux ex tablo1()=tablo2()
mais peut on effectuer une opération sur un tableau complet comme du


genre:
tablo1()=tablo2()+5 (ajouter 5 à la valeur de chaque élément du tablo2).


Je
sais que ce que j'ai écrit n'est pas valable mais y aurait-il un moyen
quelconque? En fait trouver une méthode utra rapide pour changer toutes


les
valeurs d'un tableau!



Hello Marc,

Ce n'est pas possible en VB. Il ya des langages qui permettent
de faire ce genre de traitement, mais pas VB (Lisp, Python, etc.)
Pour des cas particuliers, on peut si ça en vaut la peine écrire
des fonctions dédiées, dans un langage qui permet une manipulation
efficace des données en mémoire. On peut par exemple faire une fonction
qui ajoute une valeur à chaque élément du tableau, comme dans ton exemple.
Coder ceci en C serait simple. Tu peux aussi le faire en VB en jouant
avec les API comme CopyMemory et ce genre de choses.
Si tu as besoin d'une grande vitesse d'exécution, le passage par un
langage
bas niveau ou par l'utilisation des API de manipulation mémoire semble
le plus efficace. En fonction de l'opération à effectuer sur le tableau,
il est surement possible de choisir la meilleure méthode.

--
Jean-marc





Avatar
Fred
Dans : news:%
X écrit :

Mais si je fais:


Sub Form_Activate()
Dim i As Long
Dim t1(9)
Dim t2(9)
'
For i = 0 To 9
t1(i) = Second(Time) * i
t2(i) = t1(i) + i
Next i
'
List1.Clear
For i = 0 To 9
List1.AddItem i & " = " & Format(t1(i), "000") & " : " &
Format(t2(i), "000")
Next i
End Sub

LA VALEUR 0 EST VIDE !!!




Non. Elle n'est pas vide.


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Jean-Marc
"Patrice Henrio" a écrit dans le message de
news:ez%
Bonjour,

A moins d'avoir à utiliser cela un bon million de fois je ne crois pas


que
le passage par une fonction en C fera gagner énormément par rapport au
parcours du tableau.
Par contre cela dépend beaucoup de l'opération elle-même.



C'est exact bien sur. Ce genre de manips n'est valable (n'a du sens)
que si on doit effectuer le traitement un très grand nombre de fois
ou bien si le tableau lui même est immense. Dans ce cas, et à adapter
au cas par cas bien sur, l'utilisation de fonctions de manipulation
directe de la mémoire (memset, memcpy, etc.) peut être extrèmement
rapide et permettre des gains de temps très très importants, pouvant
aller de 100 à 1000 ou plus fois plus vite.

J'ai publié ici même plusieurs benchmarks qui montre que l'utilisation
de certaines fonctions bas-niveau (dll en C ou pour certaines
utilisations
le SafeArray) permet des gains de performances proprement finlandais!
Oups
je veux dire monstrueux :-) (Eurovision joke)

Je reposte pour mémoire:

Le SafeArray (merci François!):
http://users.skynet.be/candide/bench/benchcpm.htm

Un simple test de parité:
http://users.skynet.be/candide/jmn/vb/documents/bench/bench3.htm


Par contre, bien entendu, Guy Detienne a raison les tableaux


commencent
implicitement à 0 comme il l'indique.



Tout à fait!

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Guy DETIENNE
Salut ;O)

Relis ton exemple donné à marc et relis ce que je te réponds. Je crois que
tu n'as pas compris là où je voulais en venir.

Dans l'exemple que tu donnes,

dim t1(100)
dim t2(100)
dim i as ong

for i = 1 to 100
t2(i)=t1(i) + 5
next i

tu crées un tableau de 100 et tu le remplis en bouclant via un For Next.
La boucle commence à 1, donc tu oublies l'indice 0 !!! Tu remplis mal ton
tableau. Etait-ce fait exprès ?
Je voulais juste te rappeler que le premier indice d'un tableau, du moins
déclaré comme tu l'as fait, commence à 0 (je ne parle pas de sa valeur).

Pour ton info, les indices des objets ne commencent pas forcément à 0. Ceux
de Microsoft peut-être mais cela n'est nullement une généralité. Je
pourrais très bien créer mon propre ActiveX (donc object) ayant comme
premier élément l'indice 1.

Lorsque tu dis qu'une variable commence à 1, je ne vois pas trop où tu veux
en venir.
Un tableau en VB à par défaut son premier indice commencant à 0 et je ne
parle pas ici si sa valeur est égale à zéro ou autre chose.

Guy


"X" a écrit dans le message de
news:%
Non Môsieur,

Les objets commence à zéro, et les variables à 1 (sauf ???), voici un
exemple:

Sub Form_Activate()
Dim i As Long
Dim t1(9)
Dim t2(9)
'
For i = 1 To 9
t1(i) = Second(Time) * i
t2(i) = t1(i) + i
Next i
'
List1.Clear
For i = 1 To 9
List1.AddItem i & " = " & Format(t1(i), "000") & " : " & Format(t2(i),
"000")
Next i
End Sub

Les valeurs 1 à 9 son templies
----------------------------------

Mais si je fais:


Sub Form_Activate()
Dim i As Long
Dim t1(9)
Dim t2(9)
'
For i = 0 To 9
t1(i) = Second(Time) * i
t2(i) = t1(i) + i
Next i
'
List1.Clear
For i = 0 To 9
List1.AddItem i & " = " & Format(t1(i), "000") & " : " & Format(t2(i),
"000")
Next i
End Sub

LA VALEUR 0 EST VIDE !!!

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
--------------------------------------------------------------------------


----------
"Guy DETIENNE" a écrit dans le message de news:

> Salut ;O)
>
> N'oublie pas qu'un tableau par défaut en VB est indicé à 0. Donc ton
> exemple ne remplira jamais l'indice 0, seulement 1 à 100.
> Si tu désires que l'indice commence à 1, il faut le déclarer


explicitement
> en en-tête avec l'instruction suivante : Option Base 1 (perso, je ne


bosse
> jamais ainsi)
>
> Pour évitier cela, utilise LBound et UBound pour connaître les bornes
> inférieures et supérieures d'un tableau :
> Pour info, LBound et UBound plantent si le tableau n'est pas


dimensionné.
> Donc il faudra préalablement vérifié sur le tableau est dimensionné en
> trappant l'erreur.
>
> For i = LBound(t1) To UBound(t1)
> t2(i) = t1(i) + 5
> Next i
>
> Guy
>
>
>
>
> "X" a écrit dans le message de
> news:
>> Bonjour, pour reprendre ton exemple:
>>
>> dim t1(100)
>> dim t2(100)
>> dim i as ong
>> ...on leur donne des valeurs...
>> for i = 1 to 100
>> t2(i)=t1(i) + 5
>> next i
>>
>> --
>> Merci beaucoup, au revoir et à bientôt :o)
>> ------
>> Site logiciels
>> http://irolog.free.fr
>> Mail
>> http://irolog.free.fr/ecrire/index.htm
>> Site perso
>> http://irolog.free.fr/joe/index.htm
>> Principe d'utilisation des news Groups
>>


http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

-------------------------------------------------------------------------




-
> ----------
>> "marc.dufresne" a écrit dans


le
>> message de news: 44723323$0$8028$
>> > bonjour
>> > on peut faire correspondre deux tableaux ex tablo1()=tablo2()
>> > mais peut on effectuer une opération sur un tableau complet comme du
>> > genre: tablo1()=tablo2()+5 (ajouter 5 à la valeur de chaque élément


du
>> > tablo2). Je sais que ce que j'ai écrit n'est pas valable mais y
> aurait-il
>> > un moyen quelconque? En fait trouver une méthode utra rapide pour
> changer
>> > toutes les valeurs d'un tableau!
>> >
>> > merci d'avance
>> >
>>
>>
>
>




Avatar
X
Je me suis planté, c'ets parce que je vois quasi-toujours les boucles
prtir à 1 sur les tableaux, mais quand même, voici un exemple avec son
résultat:

Option Explicit
Sub Form_Load()
Dim i As Long
Dim t1(10)
For i = 0 To 10
t1(i) = Format(i, "00")
List1.AddItem t1(i)
Next i
End Sub
'''''''''''''''''
00
01
02
03
04
05
06
07
08
09
10
''''''
Ça veut dire que t1(10), le 10 ne veut pas dire 10 éléments, mais de 0 (par
défaut) à 10 éléments = 11
Et que pour en avoir 10 il faut:
Dim t1(1 To 10) ou Dim t1(0 to 9)

D'où ma confusion dans ce bordel, désolé :o)
A l'origine j'avait retenu que 10 éléments s'écrivaient x(10)...
En plus, pour éviter les erreurs, en effet, j'ognore tant que possible
l'élément 0, même les objets, si j'en veux 10, j'en mets 11 puis j'efface le
0, car c'est sources d'erreur quand il y en a beaucoup à programmer depuis
0, mais de compter soi-même instinctivement depuis 1...

Mais j'ai tort, pardon :o)
--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Guy DETIENNE" a écrit dans le message de news:

Salut ;O)

Relis ton exemple donné à marc et relis ce que je te réponds. Je crois
que
tu n'as pas compris là où je voulais en venir.

Dans l'exemple que tu donnes,

dim t1(100)
dim t2(100)
dim i as ong

for i = 1 to 100
t2(i)=t1(i) + 5
next i

tu crées un tableau de 100 et tu le remplis en bouclant via un For Next.
La boucle commence à 1, donc tu oublies l'indice 0 !!! Tu remplis mal ton
tableau. Etait-ce fait exprès ?
Je voulais juste te rappeler que le premier indice d'un tableau, du moins
déclaré comme tu l'as fait, commence à 0 (je ne parle pas de sa valeur).

Pour ton info, les indices des objets ne commencent pas forcément à 0.
Ceux
de Microsoft peut-être mais cela n'est nullement une généralité. Je
pourrais très bien créer mon propre ActiveX (donc object) ayant comme
premier élément l'indice 1.

Lorsque tu dis qu'une variable commence à 1, je ne vois pas trop où tu
veux
en venir.
Un tableau en VB à par défaut son premier indice commencant à 0 et je ne
parle pas ici si sa valeur est égale à zéro ou autre chose.

Guy


"X" a écrit dans le message de
news:%
Non Môsieur,

Les objets commence à zéro, et les variables à 1 (sauf ???), voici un
exemple:

Sub Form_Activate()
Dim i As Long
Dim t1(9)
Dim t2(9)
'
For i = 1 To 9
t1(i) = Second(Time) * i
t2(i) = t1(i) + i
Next i
'
List1.Clear
For i = 1 To 9
List1.AddItem i & " = " & Format(t1(i), "000") & " : " &
Format(t2(i),
"000")
Next i
End Sub

Les valeurs 1 à 9 son templies
----------------------------------

Mais si je fais:


Sub Form_Activate()
Dim i As Long
Dim t1(9)
Dim t2(9)
'
For i = 0 To 9
t1(i) = Second(Time) * i
t2(i) = t1(i) + i
Next i
'
List1.Clear
For i = 0 To 9
List1.AddItem i & " = " & Format(t1(i), "000") & " : " &
Format(t2(i),
"000")
Next i
End Sub

LA VALEUR 0 EST VIDE !!!

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
--------------------------------------------------------------------------


----------
"Guy DETIENNE" a écrit dans le message de news:

> Salut ;O)
>
> N'oublie pas qu'un tableau par défaut en VB est indicé à 0. Donc ton
> exemple ne remplira jamais l'indice 0, seulement 1 à 100.
> Si tu désires que l'indice commence à 1, il faut le déclarer


explicitement
> en en-tête avec l'instruction suivante : Option Base 1 (perso, je ne


bosse
> jamais ainsi)
>
> Pour évitier cela, utilise LBound et UBound pour connaître les bornes
> inférieures et supérieures d'un tableau :
> Pour info, LBound et UBound plantent si le tableau n'est pas


dimensionné.
> Donc il faudra préalablement vérifié sur le tableau est dimensionné en
> trappant l'erreur.
>
> For i = LBound(t1) To UBound(t1)
> t2(i) = t1(i) + 5
> Next i
>
> Guy
>
>
>
>
> "X" a écrit dans le message de
> news:
>> Bonjour, pour reprendre ton exemple:
>>
>> dim t1(100)
>> dim t2(100)
>> dim i as ong
>> ...on leur donne des valeurs...
>> for i = 1 to 100
>> t2(i)=t1(i) + 5
>> next i
>>
>> --
>> Merci beaucoup, au revoir et à bientôt :o)
>> ------
>> Site logiciels
>> http://irolog.free.fr
>> Mail
>> http://irolog.free.fr/ecrire/index.htm
>> Site perso
>> http://irolog.free.fr/joe/index.htm
>> Principe d'utilisation des news Groups
>>


http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

-------------------------------------------------------------------------




-
> ----------
>> "marc.dufresne" a écrit dans


le
>> message de news: 44723323$0$8028$
>> > bonjour
>> > on peut faire correspondre deux tableaux ex tablo1()=tablo2()
>> > mais peut on effectuer une opération sur un tableau complet comme du
>> > genre: tablo1()=tablo2()+5 (ajouter 5 à la valeur de chaque élément


du
>> > tablo2). Je sais que ce que j'ai écrit n'est pas valable mais y
> aurait-il
>> > un moyen quelconque? En fait trouver une méthode utra rapide pour
> changer
>> > toutes les valeurs d'un tableau!
>> >
>> > merci d'avance
>> >
>>
>>
>
>








Avatar
marc.dufresne
Bonjour à tous et merci pour votre intéret
en fait je veux faire l'affichage d'une photo en commençant par un fond
uniforme et faire apparaitre l'image petit à petit, donc pour ça j'utilise
la fonction getDIBits qui me permet de récupérer le tableau des valeurs de
couleur de chaque pixel (1024*1280*3)(fonction elle assez rapide pour créer
ce tableau environ 470millisecondes). Je commence par un tableau avec toutes
les valeurs à zéro par exemple , je l'affiche avec la fonction
setDIBits(fonction encore plus rapide 30millisecondes) puis dans une boucle
j'incrémente chaque éléments du tableau par 1/5 de la valeur de l'image
d'origine.
For X = 1 To Lpics
For Y = 1 To Hpics
PicBits2(1, X, Y) = PicBits2(1, X, Y) + PicBits(1, X, Y) vitcoul
'vitcoul=5 par exemple
PicBits2(2, X, Y) = PicBits2(2, X, Y) + PicBits(2, X, Y) vitcoul
PicBits2(3, X, Y) = PicBits2(3, X, Y) + PicBits(3, X, Y) vitcoul
Next Y
Next X
mais ce calcul dans une boucle est trop long 4 à 5 secondes pour 1280*1024
pixels

Alors Jean marc tu dits" On peut si ça en vaut la peine" pour moi ça vaut la
peine ma sueur n'est pas payée, ce n'est que de l'amusement, ce qui
m'intéresse surtout c'est de trouver une méthode qui est plus rapide pour
changer la valeur de ce tableau. Malheureusement j'ai aucune connaissance en
C, mais si tu avais un petit programme très bien commenté(pour pouvoir
l'étudier, le comprendre) je suis preneur, mais s'il y avait des fonctions
même API que je pourrais manipuler en VB et surtout qui améliorerait très
sensiblement le calcul, tu parles de 100 à 1000 fois plus rapide. Dans
l'immediat je vais aller voir l'adresse que tu as indiquée.

Merci encore

"Jean-Marc" a écrit dans le message de news:
4473501e$0$3813$
"Patrice Henrio" a écrit dans le message de
news:ez%
Bonjour,

A moins d'avoir à utiliser cela un bon million de fois je ne crois pas


que
le passage par une fonction en C fera gagner énormément par rapport au
parcours du tableau.
Par contre cela dépend beaucoup de l'opération elle-même.



C'est exact bien sur. Ce genre de manips n'est valable (n'a du sens)
que si on doit effectuer le traitement un très grand nombre de fois
ou bien si le tableau lui même est immense. Dans ce cas, et à adapter
au cas par cas bien sur, l'utilisation de fonctions de manipulation
directe de la mémoire (memset, memcpy, etc.) peut être extrèmement
rapide et permettre des gains de temps très très importants, pouvant
aller de 100 à 1000 ou plus fois plus vite.

J'ai publié ici même plusieurs benchmarks qui montre que l'utilisation
de certaines fonctions bas-niveau (dll en C ou pour certaines
utilisations
le SafeArray) permet des gains de performances proprement finlandais!
Oups
je veux dire monstrueux :-) (Eurovision joke)

Je reposte pour mémoire:

Le SafeArray (merci François!):
http://users.skynet.be/candide/bench/benchcpm.htm

Un simple test de parité:
http://users.skynet.be/candide/jmn/vb/documents/bench/bench3.htm


Par contre, bien entendu, Guy Detienne a raison les tableaux


commencent
implicitement à 0 comme il l'indique.



Tout à fait!

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;



1 2 3 4