Storing Images in XML files using C#
XML files contain data in the form of text. Any data can be stored in and retrieved from an XML file as long as you can convert the data to text before writing to the XML file and then convert the text from the XML file into the correct data type when reading it back.
To convert and image in to a string so that you can store the image in an XML file, there are a couple of steps to go through:-
1. Convert the image to an array of bytes.
2. Convert the array of bytes to a string.
For this second step there is already a standard encoding scheme – Base64 – for encoding binary (byte) data into a string format. Luckily for both these conversion steps, .Net already includes the necessary classes and methods to do the work for us.
Here is a C# example of converting a PNG file into a string that could then be stored in an XML file:
String TheImageFile = @”c:\about.png”;
Image TheImage = Image.FromFile(TheImageFile);
TypeConverter converter = TypeDescriptor.GetConverter(typeof(Image));
String TheImageAsString = Convert.ToBase64String((Byte)converter.ConvertTo(TheImage, typeof(Byte)));
Converting back from a string to an image is a matter of reversing the steps …
Byte TheImageAsBytes = Convert.FromBase64String(TheImageAsString);
MemoryStream MemStr = new MemoryStream(TheImageAsBytes);
Image I = Image.FromStream(MemStr);
If you have a document containing a mix of text and images that you want to tidily save into a single file, you can use code like the above to easily store any embedded images as well as the text.