How can I convert a BLOB represented as a string to a System.Drawing.Image type?
Background
I am going to import information about users together with their photo from a csv file using c#. The proprietary SDK that I use requires the photo to be a System.Drawing.Image
Below is an example of the csv file.
surname firstname photo
Blogs Joe 0xFFD8FFE000104A46494600010101005F005F0000FFDB0043000D090A
The photo field is actually 5k chars long and is a direct export of the BLOB field value in the sql server db. We have just taken the raw value from the database field and exported it to the csv file.
Below is the code that demonstrates how far I have got. The cvsuser
variable represents one row of the csv file.
// We need to convert the photo from a string to a byte array
string strPhoto = null;
strPhoto = csvuser.photo; // The string that represents the BLOB
byte[] bytes = new byte[strPhoto.Length * sizeof(char)];
System.Buffer.BlockCopy(strPhoto.ToCharArray(), 0, bytes, 0, bytes.Length);
// Then we create a memory stream that holds the image
MemoryStream photostream = new MemoryStream( bytes );
// Then we can create a System.Drawing.Image by using the Memory stream
var photo = Image.FromStream(photostream);
However, the Image.FromStream()
line throws a System.ArgumentException with the message "Parameter is not valid."
Question
How can I convert the BLOB represented as a string to a System.Drawing.Image type?
The examples I have seen previously would, for example, fetch the blob straight from the database or reading the image from a file.