Xamarin:如何捕获便携式应用程序中的图像数据(不仅用于显示)
问题描述:
我需要使用xamarin.forms便携式摄像机从我的相机捕获图像,并获取对图像字节[]数据的访问权限以用于图像处理目的。Xamarin:如何捕获便携式应用程序中的图像数据(不仅用于显示)
这怎么办?
我有一个捕获图像,并只显示它,使用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实际拍摄照片的工作代码在设备上。
我该如何修改代码以给我图像原始数据(或完全使用不同的代码)?
感谢
答
你可以把mediaFile.Path
,并把它作为一个DependencyService参数: https://developer.xamarin.com/guides/xamarin-forms/dependency-service/
答
此:
//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您可以访问文档将帮助您获得PCL中的字节[]:
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;
using (MemoryStream ms = new MemoryStream())
{
mediaFile.Source.CopyTo(ms);
byte[] attchmentbytes = ms.ToArray();
}
ImageSource = ImageSource.FromStream(() => mediaFile.Source);
return mediaFile;
}
return null;
}, _scheduler);
}
+0
从相机插件获得的MediaFile路径属性谢谢!您的解决方案是否拍摄照片,然后将照片数据复制到存储器流中,然后再次复制到字节[],或者是否参考相机拍摄的内存中的数据? 我想知道数据被复制了多少次,以及是否有办法减少这个数量。 – Gulzar
应该在路径参数中给出什么?相机在哪里? – Gulzar
您应该通过'MediaFile mediaFile = t.Result;' –