【问题标题】:Android Xamarin - retrieve the image stored in an imageviewAndroid Xamarin - 检索存储在 imageview 中的图像
【发布时间】:2019-07-31 17:59:30
【问题描述】:

我将图像作为存储在数据库中的字节数组检索,并将其转换为位图并在 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);

在某些时候图像发生了变化,我需要将其存储回数据库中。我如何将图像从图像视图中取出?到目前为止,我所看到的所有内容都处理附加的可绘制对象,在这种情况下没有可绘制对象。

好像没有这样的方法:

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】:

    您需要做的是如下所示:

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

    其中 imageView 是您想​​要从中获取位图的 imageView 控件

    更新:

    从位图转换为字节数组,如下所示:

       byte[] bitmapData;
       using (var stream = new MemoryStream())
       { 
      bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
        bitmapData = stream.ToArray();
       }
    

    【讨论】:

    • 那个(显然有效,还不确定,因为现在我需要将图像转换为字节数组,以便将其存储到数据库中。我修改了我的问题。
    • 我已经为您添加了一个更新,只是为了让您知道如果您有需要做多项事情的要求,您应该在问题中提及它,一旦回答就更改问题不是StackOverflow 是如何工作的,无论如何,祝你好运。
    • 谢谢,全部编译完毕,我现在开始端到端测试。完成后我会发布结果。是的,我应该发布这两个要求,我假设我可以自己编写字节数组代码。我猜错了....
    • 端到端测试成功。感谢您的所有帮助。
    • 很高兴为您提供帮助,如果您正在学习 xamarin,并且如果您想进一步学习,您可以在 medium 上关注我,并查看我的博客!我每周都会写一些博客,以及如何在 xamarin 中进行。链接到我的简历中,快乐编码!
    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 2021-03-26
    • 1970-01-01
    • 2018-12-29
    • 2017-09-04
    • 2012-02-03
    • 1970-01-01
    相关资源
    最近更新 更多