2010-10-24 22 views
3

J'ai une méthode qui retourne un tableau de ByteArray:tableau de ByteArray dans MemoryStream

public byte[][] Draw(ImageFormat imageFormat, ImageSize imageSize); 

et je dois l'écrire dans un MemoryStream:

var byteArray = instanceName.Draw(ImageFormat.Jpeg, ImageSize.Dpi150); 
MemoryStream ms = new MemoryStream(byteArray[0]); 

Cela fonctionne jusqu'à présent parce que la array of byteArray n'a jamais qu'un seul élément. Quelqu'un serait-il capable de pointer et de fournir une solution sur: que se passerait-il si le tableau de byteArray avait plus d'un élément?

Je suppose qu'avec le code actuel je prendrais toujours le premier élément du byteArray et jetterais le reste, mais j'ai besoin de MemoryStream et il ne peut pas prendre un tableau multi-dimensionnel.

Répondre

1

i Vous aurez à boucle et écrire, quelque chose comme ceci:

var ms = new MemoryStream(); 
for(var i=0; i < byteArray.Length; i++) 
    ms.Write(byteArray[i], 0, byteArray[i].Length); 

(je ne suis pas sûr qu'il fonctionne tel quel, vous pourriez avoir à régler, mais il est le principe)

+0

Cela peut ne pas fonctionner car le deuxième paramètre du décalage d'octets 'Write' ne sera pas le 0 pour les éléments autres que le premier. Bonne réponse cependant. – VoodooChild

+2

Hm, non? C'est l'offset pour commencer à écrire, pas à. – Onkelborg

+0

vous avez raison, c'est le décalage octet dans le tampon à partir de laquelle commencer à écrire. Donc ça pourrait marcher comme ça, non? – VoodooChild

0

Comme vous l'avez mentionné, seul le premier élément à [0] position serait utilisé par flux de mémoire. Comme le flux de mémoire est séquentiel par conception, vous avez besoin d'une boucle pour flatter votre tableau de tableaux et le placer dans un flux de mémoire. En guise de seconde lecture à votre code, je suggère de changer votre méthode Draw() pour produire une structure de données linéaire plutôt que bidimensionnelle (tableau de tableau) si vous n'avez pas besoin de ce type de structure de données ailleurs dans votre code.

+0

Je ne peux pas, cela vient d'un contrôle tiers - J'ai pensé à cela :) – VoodooChild

+0

Ensuite, écrivez un cours d'emballage autour il. – Xaqron

+0

Ok, que se passe-t-il s'il existe une raison pour laquelle le contrôle tiers renvoie un tableau de byteArray? Devrions-nous écrire une classe wrapper juste pour changer les types de retour de la fonction d'origine? – VoodooChild