posted by By훈트 2011.02.18 11:22

이번에는 Bitmap 데이터 형을 byte Array로 변환하거나 혹은 그 역으로 변환하는 예제를 다루어 보도록 하겠습니다.

해결책

ByteArrayOutputStream 인스턴스를 생성한 후, Bitmap의 compress 메서드를 통해 비트맵을 압축하여 stream에 담습니다.

BitmapFactory의 decodeByteArray 메서드를 통해 byte Array를 Bitmap으로 변환합니다.

토의

안드로이드의 Bitmap은 비트맵 데이터를 stream에 넣어주는 compress 메서드를 제공하고 있습니다.

  1. public byte[] bitmapToByteArray( Bitmap $bitmap ) {  
  2.         ByteArrayOutputStream stream = new ByteArrayOutputStream() ;  
  3.         $bitmap.compress( CompressFormat.JPEG, 100, stream) ;  
  4.         byte[] byteArray = stream.toByteArray() ;  
  5.         return byteArray ;  
  6.     }  

compress 인자 값에는 압축 옵션( JPEG, PNG ) 와 품질 설정 ( 0 - 100까지의 int형 ), 그리고 압축된 바이트배열을 담을 stream을 넘겨줍니다.

byteArray는 stream의 toByteArray() 메서드를 통해 반환받을 수 있습니다.

다음은 역으로, 바이트 배열로부터 비트맵을 생성하는 코드 입니다.

  1. public Bitmap byteArrayToBitmap( byte[] $byteArray ) {  
  2.     Bitmap bitmap = BitmapFactory.decodeByteArray( $byteArray, 0, $byteArray.length ) ;  
  3.     return bitmap ;  
  4. }  

바이트 배열로부터 비트맵 생성은 BitmapFactory의 decodeByteArray의 메서드를 통해 간단히 생성할 수 있습니다. decodeByteArray의 메서드 인자값으로 바이트 배열과 offset(배열의 시작점), length(decode할 바이트 배열의 길이)를 넘겨줍니다.

결과

관련예제

안드로이드 카메라 캡쳐해서 bitmap 얻어오기



[출처] 시스님의 블로그

신고
posted by By훈트 2010.07.30 14:36

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
   {
     // insert new entry into table
     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();

         // insert new entry into table
         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)
   {
      // some exception processing
   }
}

Get Image from DB table and show it

 Collapse Copy Code
 // get image
 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
   {
     // insert new entry into table
     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();
   }
}

신고
posted by By훈트 2010.07.29 12:08
Object 에서 byte[]
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);   
out.writeObject(yourObject);
byte[] yourBytes = bos.toByteArray(); 

byte[]에서 Object
ByteArrayIntputSream bis = new ByteArrayInputStream(yourBytes);
ObjectInput in = new ObjectInputStream(bis);
Object o = in.readObject();
신고