过去几天我一直在搜索,但没有找到解决问题的方法。我目前正在开发一款xamarin Android应用。我想通过使用数据库中的字节数组列来显示图像。我正在使用另一个程序来查找特定照片的字节数组,之后我将其值插入到我的主项目的字节数组列中。
这是我尝试重现图像的代码:
Android.Graphics.Bitmap bitmap=BitmapFactory.DecodeByteArray(currentexercis.image, 0, currentexercis.image.Length);
viewHolder.exercis_photo.SetImageBitmap(bitmap);
Currentexercis.image表示我的数据库中的字节数组,它的值似乎没问题,但每次位图都为空。
这是我的其他程序中的代码,我将图像转换为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");
答案 0 :(得分:1)
我认为你应该这样使用。
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
答案 1 :(得分:0)
在Xamarin中使用C#的字节数组到图像
有一些第三方库可以很好地实现此功能,例如Picasso或Glide。
对于Glide
,有一份官方文档显示了如何在Xamarin.Android
项目中使用它:Binding a .JAR。
或者您可以直接从nuget包中使用它:
然后你可以这样编码:
Glide.With(context)
.Load(imageBytes)
.Apply(RequestOptions.CircleCropTransform())
.Into(imageView);
答案 2 :(得分:0)
转换为byteArray
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));
}
}
将字节数组转换为位图
{{1}}