DiddanDo
DiddanDo

Reputation: 401

I want to get the image data from a stream in Xamarin Forms using XLABS

I am trying to get the raw image data from a stream and I am not sure where to go from here. I have a viewmodel and a page where I use the function where I select a picture from a gallery using XLABS.

My viewmodel:

public ImageSource ImageSource
{
    get { return _ImageSource; }
    set { SetProperty (ref _ImageSource, value); }
}

private byte[] imageData;

public byte[] ImageData { get { return imageData; } }

private byte[] ReadStream(Stream input)
{
    byte[] buffer = new byte[16*1024];
    using (MemoryStream ms = new MemoryStream())
    {
        int read;
        while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            ms.Write(buffer, 0, read);
        }
        return ms.ToArray();
    }
}

public async Task SelectPicture()
{
    Setup ();

    ImageSource = null;


    try
    {
        var mediaFile = await _Mediapicker.SelectPhotoAsync(new CameraMediaStorageOptions
            {
                DefaultCamera = CameraDevice.Front,
                MaxPixelDimension = 400
            });

        VideoInfo = mediaFile.Path;
        ImageSource = ImageSource.FromStream(() => mediaFile.Source);

    }
    catch (System.Exception ex)
    {
        Status = ex.Message;
    }
}


private static double ConvertBytesToMegabytes(long bytes)
{
    double rtn_value = (bytes / 1024f) / 1024f;

    return rtn_value;
}

The page where I use the code:

MyViewModel photoGallery = null;

photoGallery = new MyViewModel ();

private async void btnPickPicture_Clicked (object sender, EventArgs e)
{
    await photoGallery.SelectPicture (); 
    imgPicked.Source = photoGallery.ImageSource; //imgPicked is my  image x:name from XAML.

}

Upvotes: 0

Views: 6259

Answers (1)

Jason
Jason

Reputation: 89102

this will initialize the ImageData property you already have defined on your ViewModel

VideoInfo = mediaFile.Path;
ImageSource = ImageSource.FromStream(() => mediaFile.Source);

// add this line
imageData = ReadStream(mediaFile.Source);

Upvotes: 3

Related Questions