我正在尝试从选择图片时从中获取基础图像数据。使用摄像头和选择图片的功能本身可以很好地工作,我只缺少一件事,那就是获取图像数据。Imagedata位于我想的返回的媒体文件中,但我不确定如何在ContentPage上与之达到。
(我使用此项目:https://github.com/xlabs/xamarin-forms-labs/wiki/camera)
这个想法是将Imagedata发送到ContentPage的数据库。
这是名为" cameraviewModel"的ViewModel:
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;
}
}
现在在我的内容页面上,我有一个:
CameraViewModel cameraOps = null;
public PhotoPage ()
{
InitializeComponent ();
cameraOps = new CameraViewModel ();
cameraOps. //trying to reach the mediafile here
}
更新的代码:
private MediaFile _file;
public MediaFile File
{
get { return _file; }
set
{
_file = value;
}
}
public async Task SelectPicture()
{
Setup ();
ImageSource = null;
try
{
File = await _Mediapicker.SelectPhotoAsync(new CameraMediaStorageOptions
{
DefaultCamera = CameraDevice.Front,
MaxPixelDimension = 400
});
VideoInfo = File.Path;
ImageSource = ImageSource.FromStream(() => File.Source);
}
catch (System.Exception ex)
{
Status = ex.Message;
}
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
File = value as MediaFile;
return ImageSource.FromStream(() => File.Source);
}
您可以在视图模型上创建属性:
private MediaFile _file;
public MediaFile File
{
get { return _file; }
set
{
_file = value;
OnPropertyChanged();
}
}
,然后在ContentPage
上绑定它:
<Image Source="{Binding File}, Converter={StaticResource MediaFileToImageSourceConverter}">
转换器:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var file = value as MediaFile;
return ImageSource.FromStream(() => file.GetStream()));
}
更新的代码:(不是MVVM的最佳传统,但对于您的样本)
) public async Task<MediaFile> SelectPicture()
{
Setup();
MediaFile file = null;
try
{
file = await _Mediapicker.SelectPhotoAsync(new CameraMediaStorageOptions
{
DefaultCamera = CameraDevice.Front,
MaxPixelDimension = 400
});
}
catch (System.Exception ex)
{
Status = ex.Message;
}
return file;
}
在背后的代码上:
public async void OnTakePhotoButtonClicked(object sender, EventArgs args)
{
var file = await cameraOps.SelectPicture();
someImage.ImageSource = ImageSource.FromStream(() => file.Source);
}