2010-09-17 9 views
3

J'ai trouvé qu'une image peut être stockée sous forme de chaîne .Pour donner un exemple, j'ai inclus une partie de mot ms qui a une image.J'ai enregistré un fichier Word avec image et enregistré au format xml .quand j'ai ouvert le fichier xml dans un bloc-notes j'ai eu section suivante .Il doit être l'image stockée comme un flux de texte. Existe-t-il une manière similaire de le faire dans .net.Comment convertir une image en un flux de caractères

<pkg:part pkg:name="/word/media/image1.png" pkg:contentType="image/png" pkg:compression="store"> 
    <pkg:binaryData> 
     iVBORw0KGgoAAAANSUhEUgAAAMgAAAA2CAMAAAC1HibFAAADAFBMVEWlweL95Mn90qXs8vn7woTi 
     6/b7unT94sO8oIP93br4okTJjExJgsS9mXT5rVr7xYr4mzaStdz+/v/5qlT3kiT7vnuCqdb7zZv8 
     1aqXqb5GgMP4nTt6mLpMhMX//Pn/+vT/s1n/4rU+fMH+8eXT4fH1+PyTqsb++PGXl5n3lSpQh8b9 
     6tVLg8T3iRP6sWO80el5o9OpxOP+7t3+9uz+2rLC1ez+7Nmbut6yyub+9On5pUqQt+P3jh2SmqNE 
     ...Truncated for easy reading... 
     ex9vtLWG320M9N9gHow3tv8BO9hrVo7LVzgAAAAASUVORK5CYII= 
    </pkg:binaryData> 
</pkg:part> 

J'ai essayé suivant façon

Bitmap bmp = new Bitmap(@"D:/bmp.bmp"); 
    MemoryStream mem = new MemoryStream(); 
    byte[] b = mem.ToArray(); 

Mais il me donner un tableau d'octets au lieu de characters.If il était personnages, je pourrais l'utiliser de plusieurs façons telles que l'enregistrement au format XML, en utilisant sql insert pour insérer l'image dans un varchar insead d'un blob. etc.

Répondre

0

Les données binaires doivent être codées pour être stockées sous forme de données de caractère, en utilisant le codage BASE64, par exemple. Il y a des encodeurs dans le framework pour faire ça avec le tableau d'octets que vous avez là.

Cependant, notez que cet encodage augmente légèrement la taille des données et implique une étape supplémentaire. Si vous pouvez stocker les données en octets directement, c'est plus efficace. mais bien sûr, vous aurez besoin de l'encodage pour XML.

+0

["légèrement"?] (Http://meta.stackexchange.com/questions/700/) – Timwi

2

L'encodage que vous voyez s'appelle base-64. Vous pouvez utiliser le code suivant pour transformer tout fichier dans la base 64, indépendamment du fait que c'est une image ou non:

byte[] fileContents = File.ReadAllBytes(@"D:/bmp.bmp"); 
var base64 = Convert.ToBase64String(fileContents); 

Cela va générer une longue chaîne unique en ligne. Vous pouvez également spécifier Base64FormattingOptions.InsertLineBreaks si vous voulez qu'il soit divisé en plusieurs lignes, comme dans le fichier XML que vous avez vu.

Questions connexes