Robert
Robert

Reputation: 77

Byte Array to Image using C# in Xamarin

I've been searching for the past few days but did not manage to find a solution for my problem. I am currently working on a xamarin Android app. I want to display an image by using the byte array column from by database. I am using another program to find the byte array of a specific photo and after that I insert manually its value in the byte array column from my principal project.

This is my code where I am trying to reproduce the image:

Android.Graphics.Bitmap bitmap=BitmapFactory.DecodeByteArray(currentexercis.image, 0, currentexercis.image.Length);
viewHolder.exercis_photo.SetImageBitmap(bitmap);

Currentexercis.image represents the byte array from my database, and its value seems to be OK, however every time bitmap is null.

This is the code from my other program where I convert the image into bytearray:

Image img = Image.FromFile(opendlg.FileName);
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
dbpicEntities1 db = new dbpicEntities1();
db.MyPictures.Add(new MyPicture() { FileName=fileName, Data = ms.ToArray() });
db.SaveChanges();
MessageBox.Show("success");

Upvotes: 2

Views: 6422

Answers (3)

Tolulope
Tolulope

Reputation: 498

convert to byteArray

 byte[] imgdata = System.IO.File.ReadAllBytes(pathToImage);

convert byte array to bitmap

 private void OnGetMemberAvatarCompleted(byte[] avatarBytes)
{
   var avatarImageView = FindViewById<ImageView>(Resource.Id.memberProfile_avatar);
   if (avatarImageView != null)
   {
      var imageBitmap = BitmapFactory.DecodeByteArray(avatarBytes, 0,avatarBytes.Length);
      RunOnUiThread(() => avatarImageView.SetImageBitmap(imageBitmap));
   }
}

Upvotes: 0

York Shen
York Shen

Reputation: 9084

Byte Array to Image using C# in Xamarin

There are some third-party library which implements this feature quite well like Picasso or Glide.

For Glide, there is official document shows how to use it in Xamarin.Android project: Binding a .JAR. Or you could directly use it from the nuget package:

enter image description here

Then you can code for example like this:

Glide.With(context)
     .Load(imageBytes)
     .Apply(RequestOptions.CircleCropTransform())
     .Into(imageView);

Upvotes: 0

BKing
BKing

Reputation: 51

I think you should use like this.

byte [] imageArray // is your data
MemoryStream mStream = new MemorySteram ();
mStream.write(imageArray,0,imageArray.Length);
Image img = Image.FromStream(mStream);
img.save(filelocation);

Bitmap bitmapimg = BitmapFactory.BitmapFactory.DecodeStream(mStream); 
// if you want to use Bitmap

Upvotes: 2

Related Questions