Xamarin:如何在便携式应用程序上捕获图像数据(不仅用于显示)

时间:2016-12-26 23:21:10

标签: mobile xamarin xamarin.forms cross-platform xlabs

我需要使用可移植的xamarin.forms从相机中捕获图像,并获取图像byte []数据的访问权限以进行图像处理。

如何做到这一点?

我有工作代码捕获图像并使用xlabs

简单地显示它
public async Task<MediaFile> TakePicture()
    {
        Setup ();

        ImageSource = null;

        return await _Mediapicker.TakePhotoAsync (new CameraMediaStorageOptions {
            DefaultCamera = CameraDevice.Front, MaxPixelDimension = 400
        }).ContinueWith (t => {
            if (t.IsFaulted)
            {
                Status = t.Exception.InnerException.ToString();
            }
            else if (t.IsCanceled)
            {
                Status = "Canceled";
            }
            else
            {
                MediaFile mediaFile = t.Result;
                ImageSource = ImageSource.FromStream(() => mediaFile.Source);

                return mediaFile;
            }

            return null;
        }, _scheduler);
    }

    private async void buttonTakePicture_Clicked() {
        await cameraViewModel.TakePicture();
        imageView.Source = cameraViewModel.ImageSource;
    }

点击按钮启动cameraViewModel.TakePicture(),然后使用xlabs实际拍摄设备上的图片。

如何更改代码以向我提供图像原始数据(或者完全使用不同的代码)?

由于

2 个答案:

答案 0 :(得分:0)

您可以使用mediaFile.Path并将其作为DependencyService的参数传递:

//For Android
public byte[] ByteArrayFromStream(string path)
{
    var bitmap = BitmapFactory.DecodeFile(path);

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

    return bitmapData;
}

//For iOS
public byte[] ByteArrayFromStream(string path)
{
    UIImage originalImage = UIImage.FromFile(path);
    return originalImage.AsPNG().ToArray();
}

要了解有关DependencyService的更多信息,您可以访问以下文档: https://developer.xamarin.com/guides/xamarin-forms/dependency-service/

答案 1 :(得分:0)

这将帮助您在PCL中获取byte []:

{{1}}