cs_RMI
Messages postés305Date d'inscriptionvendredi 18 juillet 2003StatutMembreDernière intervention 2 août 2010
-
14 mars 2006 à 15:18
cs_RMI
Messages postés305Date d'inscriptionvendredi 18 juillet 2003StatutMembreDernière intervention 2 août 2010
-
15 mars 2006 à 10:31
Bonjour,
Quel est la méthode la plus rapide pour passer par exemple d'un tableau à 1 dimension à un tableau à 2 dimensions ?
Exp: j'ai un tableau
byte[10]
et je souhaite le transformer en byte[2,5] (sans faire de boucle for)
sachant que tous les octets sont correctement alignés
sebseb42
Messages postés495Date d'inscriptiondimanche 6 juillet 2003StatutMembreDernière intervention 9 novembre 20071 14 mars 2006 à 15:52
tu doit surement pouvoir le faire avec le Marshalling/Unmarshalling, mais perso je te conseil d'utiliser une boucle for
tu peux te faire une fonction generique au cas ou tu aurais plusieurs tableau a traiter, et de tailles variables, du genre :
byte[,] TransformArray(byte[] array, int xx, int yy)
{
byte[,] result = new byte[xx, yy];
int k = 0;
for (int x = 0; x < xx; x++)
{
for (int y = 0; y < yy; y++)
{
result[x, y] = array[k++];
}
}
}
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 15 mars 2006 à 08:45
je suis dans ma période "clown"...
en fait, si tu avais été en C, le problème ne serait pas posé, car tu as accés directement à la mémoire, tu pourrais donc directement utilser ton tableau à partir de son pointeur.
mais en C#, l'accés à la mémoire est unsafe.
C'est pour cela, que la seule solution qui me vient à l'esprit est d'utiliser une boucle... à moins de faire du code unsafe.
cs_RMI
Messages postés305Date d'inscriptionvendredi 18 juillet 2003StatutMembreDernière intervention 2 août 20102 15 mars 2006 à 08:50
Je me doutais qu'il y avait bien une solution. Je sais faire faire du
unsafe car j'ai déjà eu à bidouiller des images, mais je nes ais pas
faire des copies de blocs. Pourrais-tu être plus explicite STP?
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 15 mars 2006 à 10:26
Salut, La copie par bloc ? Y'a la classe Buffer mais je sais pas si elle est vraiment rapide et si elle accepte les tableaux à plusieurs dimensions, faut tester.. mais y'aura pas plus rapide que la copie bit à bit avec les pointeurs, à la rigueur avec un pointeur int* pour limiter les passages dans la boucle. Pour un max de performance faudrait fixer les deux tableaux, et utiliser une variable plutôt que la propriété Length, le gain sera visible uniquement sur les grand tableaux.