Comment puis-je prendre un tableau d'octets d'un fichier TIFF image et la transformer en un Système.De dessin.L'Image de l'objet?
J'ai un byte[]
tableau, le contenu de la qui représentent un fichier TIFF (comme dans, si j'écris ces octets directement à un fichier à l'aide de la BinaryWriter
objet, il forme un tout à fait valide en tant que fichier TIFF) et je suis en train de le transformer en un Système.De dessin.L'Image de l'objet, de sorte que je peux l'utiliser pour plus tard manipulation (alimentation en TIFF multipage objet)
Le problème, je vais avoir, c'est que la vulgate de code pour cette tâche:
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms, true);
return returnImage;
}
ne fonctionne pas pour moi. La deuxième ligne de la méthode ci-dessus où il appelle la Image.FromStream
méthode meurt au moment de l'exécution, en disant
Parameter Not Valid
Je crois que la méthode est d'étouffement sur le fait que c'est un fichier TIFF mais je ne peux pas comprendre comment faire de la FromStream
méthode d'accepter ce fait.
Comment puis-je transformer un tableau d'octets d'une image TIFF dans un objet Image?
Aussi, comme je l'ai dit, l'objectif final est de disposer d'un tableau d'octets représentant un fichier TIFF multipage, qui contient les fichiers TIFF pour qui j'ai le tableau d'octets objets de la droite maintenant. Si il ya une bien meilleure façon d'aller à ce sujet, je suis tout à fait pour.
OriginalL'auteur Tom Kidd | 2008-08-28
Vous devez vous connecter pour publier un commentaire.
Edit: L'hypothèse ci-dessous n'est pas correct, j'ai eu la chance de tirer jusqu'à mon IDE plus tard et testé avec et sans Écriture et à la fois peuplées MemoryStream correctement.
Je pense que vous devez écrire à votre MemeoryStream premier.
Comme si ma mémoire (no pun intended) me sert correctement ce:
Crée un flux de mémoire de la taille.
Vous devrez rédiger votre tableau d'octets contenu de la mémoire de flux:
Voir si cela résout.
OriginalL'auteur Tim Saunders
OK, j'ai trouvé le problème, et c'est à partir d'une partie du code sans lien avec la partie du code, j'ai demandé à propos. Les données ont été transmis comme une chaîne de caractères, j'ai été la conversion à un tableau d'octets (ce qui a été un banc d'essai donc j'ai essayé de simuler le tableau d'octets que j'ai dans l'application principale), puis de les convertir que pour un MemoryStream, puis la réalisation d'une Image.
Ce que je n'ai pas réussi à réaliser est que la chaîne a été encodé en Base64. L'appel de
Convert.FromBase64String()
causé à son tour dans un tableau d'octets qui ne tuera pasImage.FromStream()
méthode.Donc, fondamentalement, il se résumait à une erreur stupide de ma part. Mais bon, le code ci-dessus est encore utile et cette page va probablement servir de résultats sur Google comment éviter cette erreur à quelqu'un d'autre.
Aussi, j'ai trouvé un moyen facile de construire un Multi-Page TIFF à partir de mes tableaux d'octets ici.
OriginalL'auteur Tom Kidd
Tous ces avait des indices qui m'ont aidé à comprendre mon problème qui est le même problème que la question se pose. Si je veux poster ma solution à laquelle je suis arrivé à cause de ces indices utiles. Merci pour tous les indices affichés jusqu'à présent!
Comme le Temps Saunders posté dans sa réponse, que la méthode d'Écriture pour écrire les octets de la mémoire est essentiel. C'était ma première erreur.
Puis mes données était mauvais TIFF données trop, mais dans mon cas, j'ai eu un caractère supplémentaire 13 au début de mes données d'image. Une fois que je l'ai enlevé, tout a bien fonctionné pour moi.
Quand j'ai lu sur quelques éléments de base d'un format de fichier TIFF specs, j'ai constaté que les fichiers TIFF doit commencer par II ou MM (deux octets avec des valeurs de 73 ou 77). II signifie little-endian d'ordre des octets ("Intel octet de commande") est utilisé. MM signifie que les grands-fin ("Motorola octet de commande") est utilisé. Les deux octets suivant sont un entier sur deux octets de la valeur ( = Int16 .NETTE) de 42, 101010 en binaire.
Donc une bonne TIFF flux d'octets commence avec la virgule valeurs d'octets de: 73, 73, 42, 0 ou 77, 77, 0, 42. J'encourage tout le monde avec le même problème que nous avons connu pour inspecter votre TIFF données de flux d'octets, et assurez-vous que vos données sont valides données TIFF!
Grâce Schnapple et Tim Saunders!!
OriginalL'auteur Shawn Kovac