Android Xamarin - 检索存储在imageview中的图像

问题描述 投票:1回答:1

我检索图像作为存储在数据库中的字节文件将其转换为位图并将其显示在Imageview中。我希望能够从Imageview中检索该图像并将其存储回数据库。我的数据库检索代码是:

TheService myService = new TheService.DataInterface();
DataSet MyPhoto = myService.GetPhoto(id);
byte[] imageBytes = (byte[])MyPhoto.Tables[0].Rows[0][0];
Bitmap bitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);
imageview.SetImageBitmap(bitmap);

在某些时候图像被更改,我需要将其存储回数据库中。如何从imageview中获取图像?到目前为止,我所见过的所有内容都涉及附加的绘图,在这种情况下没有可绘制的内容。

似乎没有像这样的方法:

Bitmap photo = imageview.GetCurrentImage();

任何援助将不胜感激。

**** 更新 ****

一旦我得到图像,我需要将其转换为字节数组,以将其保存到数据库中。我尝试了几种不同的方法但没有成功,最新的是:

using Java.Nio;
public static byte[] ImageToByte(Bitmap bitmap)
{
    var bytes = new Byte[30000];
    try
    {
        var byteBuffer = ByteBuffer.Allocate(bitmap.ByteCount);
        bitmap.CopyPixelsToBuffer(byteBuffer);
        bytes = byteBuffer.ToArray<byte>();
        return bytes;
    }
    catch (Exception ex)
    {
        var message = ex.Message;
        return bytes;
    }
}

这会生成一个异常“无法从'java / nio / HeapByteBuffer'转换为'[B'”

c# android xamarin.android visual-studio-2017
1个回答
0
投票

你需要做的是如下:

   BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageView.Drawable);
    Bitmap bitmap;
    if(bitmapDrawable==null){
        imageView.BuildDrawingCache();
        bitmap = imageView.GetDrawingCache();
        imageView.BuildDrawingCache(false);
    }else
    {
        bitmap = bitmapDrawable .Bitmap;
    }

其中imageView是您想要位图的imageView控件

更新:

从位图转换为byteArray,如下所示:

   byte[] bitmapData;
   using (var stream = new MemoryStream())
   { 
  bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
    bitmapData = stream.ToArray();
   }
© www.soinside.com 2019 - 2024. All rights reserved.