Android Xamarin - получить изображение, сохраненное в виде изображения - PullRequest
1 голос
/ 10 марта 2019

Я извлекаю изображение в виде байтового архива, хранящегося в базе данных, преобразую его в растровое изображение и отображаю в 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'"

1 Ответ

0 голосов
/ 10 марта 2019

Что вам нужно сделать, это что-то вроде ниже:

   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();
   }
...