MemoryStream
Saving-Rebuilding InkCanvas Strokes
Load/Unload images into/from DB table
C# Image to Byte Array and Byte Array to Image Converter Class
Introduction
Recently I was looking for a class which could convert a System.Drawing.Image
to byte[]
array and vice versa. After a lot of searching on Google, I realised that it would be faster for me to write this class and also share it with the community.
The class which I wrote is called ImageConverter.cs. The class has two methods.
First method: Convert Image
to byte[]
array:
Collapse Copy Code
public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
This method uses the System.Drawing.Image.Save
method to save the image to a memorystream
. The memorystream
can then be used to return a byte array using the ToArray()
method in the MemoryStream
class.
Second method: Convert byte[]
array to Image
:
Collapse Copy Code
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
This method uses the Image.FromStream
method in the Image
class to create a method from a memorystream
which has been created using a byte
array. The image thus created is returned in this method.
The way I happen to use this method was to transport an image to a web service, by converting it to a byte array and vice-versa.
Hope this class is useful to the community as well. The code of ImageConverter.cs can be downloaded from the link at the top of this article.
Rajan Tawate
Founder
Seegloo Web Meeting
--------------
Store Image into DB table
Collapse Copy Code
...
byte[] content = ReadBitmap2ByteArray(fileName);
StoreBlob2DataBase(content);
...
protected static byte[] ReadBitmap2ByteArray(string fileName)
{
using(Bitmap image = new Bitmap(fileName))
{
MemoryStream stream = new MemoryStream();
image.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
return stream.ToArray();
}
}
protected static void StoreBlob2DataBase(byte[] content)
{
SqlConnection con = Connection;
con.Open();
try
{
SqlCommand insert = new SqlCommand(
"insert into Images ([stream]) values (@image)",con);
SqlParameter imageParameter =
insert.Parameters.Add("@image", SqlDbType.Binary);
imageParameter.Value = content;
imageParameter.Size = content.Length;
insert.ExecuteNonQuery();
}
finally
{
con.Close();
}
}
Store Images for OLEDB provider
Some of us use OLEDB provider to communicate with SQL Server. In this case you should use the code below to store images into your DB. Pay attention to using '?
' instead of '@image
' in the SQL query.
Collapse Copy Code
protected static void StoreBlob2DataBaseOleDb(byte[] content)
{
try
{
using(OleDbConnection con = Connection)
{
con.Open();
using(OleDbCommand insert = new OleDbCommand(
"insert into Images ([stream]) values (?)",con))
{
OleDbParameter imageParameter =
insert.Parameters.Add("@image", OleDbType.Binary);
imageParameter.Value = content;
imageParameter.Size = content.Length;
insert.ExecuteNonQuery();
}
}
}
catch(Exception ex)
{
}
}
Get Image from DB table and show it
Collapse Copy Code
DataRowView drv = (DataRowView) _cm.Current;
byte[] content = (byte[])drv["stream"];
MemoryStream stream = new MemoryStream(content);
Bitmap image = new Bitmap(stream);
ShowImageForm f = new ShowImageForm();
f._viewer.Image = image;
f.ShowDialog(this);
Conclusion
You can use this technique to work with any type of binary data without using storage procedures. Good Luck.
<FORM style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" id=aspnetForm method=post name=aspnetForm action=DisplayArticle.aspx>
<INPUT id="__VIEWSTATE" value="/wEPDwUKMTAyMTMzODg1Ng9kFgJmD2QWBAIJD2QWBAIFDw8WAh4HVmlzaWJsZWdkZAINDw8WAh8AZ2RkAgoPZBYKAgcPZBYOAgEPZBYCZg8WAh4LXyFJdGVtQ291bnRmZAIDD2QWCGYPDxYCHgtOYXZpZ2F0ZVVybAUpL0tCL2RhdGFiYXNlL2ltYWdlczJkYi5hc3B4P2Rpc3BsYXk9UHJpbnRkZAICDw8WAh8AaGRkAgMPZBYGAgIPDxYCHghJbWFnZVVybAUhL3NjcmlwdC9Cb29rbWFya3MvSW1hZ2VzL2xpbmsucG5nZGQCBA8PFgIfAgU/L3NjcmlwdC9Cb29rbWFya3MvQWRkLmFzcHg/b2JpZD05MzIzJm9idGlkPTImYWN0aW9uPUFkZEJvb2ttYXJrFgYeBG5hbWUFCWJtXzkzMjNfMh4FY2xhc3NlHgdvbmNsaWNrBRtyZXR1cm4gYm9va21hcmtNZSg5MzIzLCAyKTtkAgYPFgIfBAUJYm1fOTMyM18yZAIEDw8WAh8CBSUvc2NyaXB0L0FydGljbGVzL1JlcG9ydC5hc3B4P2FpZD05MzIzZGQCBQ8WAh8EBQtDdXJSYXRfOTMyMxYCZg9kFgJmD2QWAmYPZBYEZg9kFgICAQ8PFgIeBFRleHQFGjIxIHZvdGVzIGZvciB0aGlzIGFydGljbGUuZGQCAw9kFgJmD2QWBAIBDw8WBB8HBRBQb3B1bGFyaXR5OiA0LjgxHwIFKS9zY3JpcHQvQXJ0aWNsZXMvVG9wQXJ0aWNsZXMuYXNweD90YV9zbz0xZGQCBQ8WAh8HBRxSYXRpbmc6IDxiPjMuNjQ8L2I+IG91dCBvZiA1ZAIVDxYCHwBnFgQCAQ8PFgIfAgVGL3NjcmlwdC9NZW1iZXJzaGlwL1N1YnNjcmliZS5hc3B4P3JwPSUyZktCJTJmZGF0YWJhc2UlMmZpbWFnZXMyZGIuYXNweGRkAgMPDxYCHwIFTy9zY3JpcHQvTWVtYmVyc2hpcC9TZW5kQ29uZmlybVJlcXVlc3QuYXNweD9ycD0lMmZLQiUyZmRhdGFiYXNlJTJmaW1hZ2VzMmRiLmFzcHhkZAIZD2QWCgIBD2QWBAIBDxYCHglpbm5lcmh0bWwFsQI8cD5UaGlzIGFydGljbGUgaGFzIG5vIGV4cGxpY2l0IGxpY2Vuc2UgYXR0YWNoZWQgdG8gaXQgYnV0IG1heSBjb250YWluIHVzYWdlIHRlcm1zIGluIHRoZSBhcnRpY2xlIHRleHQgb3IgdGhlIGRvd25sb2FkIGZpbGVzIHRoZW1zZWx2ZXMuIElmIGluIGRvdWJ0IHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3IgdmlhIHRoZSBkaXNjdXNzaW9uIGJvYXJkIGJlbG93LjwvcD48cD5BIGxpc3Qgb2YgbGljZW5zZXMgYXV0aG9ycyBtaWdodCB1c2UgY2FuIGJlIGZvdW5kIDxhIGhyZWY9Ii9pbmZvL0xpY2Vuc2VzLmFzcHgiPmhlcmU8L2E+PC9wPmQCAg9kFgICAQ8QZGQWAGQCBQ8WAh8BAgFkAgcPFgIfBwW1CTxoMj5PdGhlciBwb3B1bGFyIERhdGFiYXNlIGFydGljbGVzOjwvaDI+PHVsPjxsaT48YSBocmVmPSIvS0IvZGF0YWJhc2UvY2FhYWRvY2xhc3MxLmFzcHgiPkEgc2V0IG9mIEFETyBjbGFzc2VzIC0gdmVyc2lvbiAyLjIwPC9hPjxkaXYgY2xhc3M9InNtYWxsLXRleHQiPlNpbXBsZSBkYXRhYmFzZSBhY2Nlc3MgdXNpbmcgYW4gQURPIGNsYXNzLjwvZGl2PjwvbGk+PGxpPjxhIGhyZWY9Ii9LQi9kYXRhYmFzZS9maWxlaGVscGVycy5hc3B4Ij5GaWxlSGVscGVycyB2Mi4wIC0gRGVsaW1pdGVkIChDU1YpIG9yIEZpeGVkIERhdGEgSW1wb3J0L0V4cG9ydCBGcmFtZXdvcms8L2E+PGRpdiBjbGFzcz0ic21hbGwtdGV4dCI+QW4gZWFzeSB0byB1c2UgLk5FVCBsaWJyYXJ5IHRvIHJlYWQvd3JpdGUgc3Ryb25nIHR5cGVkIGRhdGEgZnJvbSBmaWxlcyB3aXRoIGZpeGVkIGxlbmd0aCBvciBkZWxpbWl0ZWQgcmVjb3JkcyAoQ1NWKS4gQWxzbyBoYXMgc3VwcG9ydCB0byBpbXBvcnQvZXhwb3J0IGRhdGEgZnJvbSBkaWZmZXJlbnQgZGF0YSBzdG9yYWdlcyAoRXhjZWwsIEFjY2VzLCBTcWxTZXJ2ZXIsIE15U3FsKTwvZGl2PjwvbGk+PGxpPjxhIGhyZWY9Ii9LQi9kYXRhYmFzZS9Dc3ZSZWFkZXIuYXNweCI+QSBGYXN0IENTViBSZWFkZXI8L2E+PGRpdiBjbGFzcz0ic21hbGwtdGV4dCI+QSByZWFkZXIgdGhhdCBwcm92aWRlcyBmYXN0LCBub24tY2FjaGVkLCBmb3J3YXJkLW9ubHkgYWNjZXNzIHRvIENTViBkYXRhPC9kaXY+PC9saT48bGk+PGEgaHJlZj0iL0tCL2RhdGFiYXNlL3NxbGRvZG9udC5hc3B4Ij5TUUwgU2VydmVyIERPJ3MgYW5kIERPTlQnczwvYT48ZGl2IGNsYXNzPSJzbWFsbC10ZXh0Ij5TUUwgU2VydmVyIGRhdGFiYXNlIGJlc3QgcHJhY3RpY2VzPC9kaXY+PC9saT48bGk+PGEgaHJlZj0iL0tCL2RhdGFiYXNlL0R5bmFtaWNNZXRob2RfSUxHZW5lcmF0b3IuYXNweCI+RHluYW1pYy4uLiBCdXQgRmFzdDogVGhlIFRhbGUgb2YgVGhyZWUgTW9ua2V5cywgQSBXb2xmIGFuZCB0aGUgRHluYW1pY01ldGhvZCBhbmQgSUxHZW5lcmF0b3IgQ2xhc3NlczwvYT48ZGl2IGNsYXNzPSJzbWFsbC10ZXh0Ij5Ib3cgdG8gdXNlIHRoZSBEeW5hbWljTWV0aG9kIGFuZCBJTEdlbmVyYXRvciBjbGFzc2VzIHRvIGNyZWF0ZSBkeW5hbWljIGNvZGUgYXQgcnVudGltZSB0aGF0IG91dHBlcmZvcm1zIHJlZmxlY3Rpb248L2Rpdj48L2xpPjwvdWw+ZAIJDw8WAh8AZ2RkAgsPZBYCZg9kFgICAQ9kFgJmD2QWAmYPFgQfBAUNUmF0ZUl0ZW1fOTMyMx8FZRYCAgYPZBYCAgEPD2QWAh8GBSJyZXR1cm4gcmF0ZUl0ZW0oOTMyMywyLHRydWUsdHJ1ZSk7ZAIbDw8WAh8AZ2RkAiEPFgIfAGhkAgsPDxYCHwIFJi9zY3JpcHQvQXJ0aWNsZXMvQXJ0aWNsZS5hc3B4P2FpZD05MzIzZGQCEQ8WAh8HBQsyNCBBdWcgMjAwNWQCEw8PFgQfBwUOU21pdGhhIFZpamF5YW4fAgUmL3NjcmlwdC9NZW1iZXJzaGlwL1ZpZXcuYXNweD9taWQ9Mjg5NzBkZAIVDxYCHwcFIkNvcHlyaWdodCAyMDA1IGJ5IE1heGltIEFsZWtzZXlraW5kZHoy3t5b1AFEWlnw6kJkhmg0NxIO" type="hidden" name="__VIEWSTATE">
<INPUT id="__EVENTVALIDATION" value="/wEWCALryJLaBgLAlMXDBwLBlMXDBwLClMXDBwLDlMXDBwLElMXDBwLP+++tCwK5upDkC+Baommd5pH6A8nKaeXZ0JWo3SoP" type="hidden" name="__EVENTVALIDATION">
License
This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.
A list of licenses authors might use can be found here
</FORM>
--------------------------
byte[] content = ReadBitmap2ByteArray(fileName);
StoreBlob2DataBase(content);
...
protected static byte[] ReadBitmap2ByteArray(string fileName)
{
using(Bitmap image = new Bitmap(fileName))
{
MemoryStream stream = new MemoryStream();
image.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
return stream.ToArray();
}
}
protected static void StoreBlob2DataBase(byte[] content)
{
SqlConnection con = Connection;
con.Open();
try
{
SqlCommand insert = new SqlCommand(
"insert into Images ([stream]) values (@image)",con);
SqlParameter imageParameter =
insert.Parameters.Add("@image", SqlDbType.Binary);
imageParameter.Value = content;
imageParameter.Size = content.Length;
insert.ExecuteNonQuery();
}
finally
{
con.Close();
}
}