C# 如何在Xamarin.iOS中获取照片的字节[]
我正在用Xamarin.iOS开发一个摄影软件。 我用的是PHPhoto类 当我拍照时,我正试图把它发送到网络上。 我计划用字节[]发送它们。 在哪里可以获得DidFinishCapture方法中照片的数据? 当我启动调试启动时,我看到 PHPhotoLibrary.SharedPhotoLibrary.PerformChanges()将自动将照片保存到照片库中 如何按字节[]检索照片? 我在PhotoData中找不到它 我以为在livephotocompanymovieurl中保存的照片有一个路径,但它总是空的C# 如何在Xamarin.iOS中获取照片的字节[],c#,xamarin.ios,phphotolibrary,C#,Xamarin.ios,Phphotolibrary,我正在用Xamarin.iOS开发一个摄影软件。 我用的是PHPhoto类 当我拍照时,我正试图把它发送到网络上。 我计划用字节[]发送它们。 在哪里可以获得DidFinishCapture方法中照片的数据? 当我启动调试启动时,我看到 PHPhotoLibrary.SharedPhotoLibrary.PerformChanges()将自动将照片保存到照片库中 如何按字节[]检索照片? 我在PhotoData中找不到它 我以为在livephotocompanymovieurl中保存的照片有一个
public partial class PhotoCaptureDelegate : AVCapturePhotoCaptureDelegate
{
public override void DidFinishCapture(AVCapturePhotoOutput captureOutput,
AVCaptureResolvedPhotoSettings resolvedSettings,
NSError error)
{
PHPhotoLibrary.RequestAuthorization(status =>
{
if (status == PHAuthorizationStatus.Authorized)
{
PHPhotoLibrary.SharedPhotoLibrary.PerformChanges(() =>
{
var creationRequest = PHAssetCreationRequest.CreationRequestForAsset();
creationRequest.AddResource(PHAssetResourceType.Photo, PhotoData, null);
var url = LivePhotoCompanionMovieUrl;
if (url != null)
{
var livePhotoCompanionMovieFileResourceOptions = new PAssetResourceCreationOptions
{
ShouldMoveFile = true
};
creationRequest.AddResource(PHAssetResourceType.PairedVideo, url, livePhotoCompanionMovieFileResourceOptions);
}
}, (success, err) =>
{
if (err != null)
Debug.WriteLine($"Error occurered while saving photo to photo library: {error.LocalizedDescription}");
});
}
});
}
}
}
如果要将照片转换为字节数组,可以使用Nuget的插件拾取或拍照
await CrossMedia.Current.Initialize();
if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
{
DisplayAlert("No Camera", ":( No camera available.", "OK");
return;
}
var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
{
SaveToAlbum = true,
Name = "test.jpg"
});
if (file == null)
return;
然后首先将其转换为流,然后再将其转换为字节数组
Stream stream = file.GetStream();
现在可以得到如下所示的字节数组
var imgDate = GetImageStreamAsBytes(stream);
var imgDate = GetImageStreamAsBytes(stream);
更新
您可以使用UIImagePickerController
UIImagePickerController imagePicker;
并在需要拍照时调用以下行
imagePicker = new UIImagePickerController
{
SourceType = UIImagePickerControllerSourceType.Camera,
MediaTypes = UIImagePickerController.AvailableMediaTypes(UIImagePickerControllerSourceType.Camera)
};
// Set event handlers
imagePicker.FinishedPickingMedia += ImagePicker_FinishedPickingMedia; ;
imagePicker.Canceled += ImagePicker_Canceled; ;
// Present UIImagePickerController;
this.PresentViewController(imagePicker, true, null);
现在可以得到如下所示的字节数组
var imgDate = GetImageStreamAsBytes(stream);
var imgDate = GetImageStreamAsBytes(stream);
谢谢你的提示。我看到媒体了。剽窃似乎奏效了,我想它可能会奏效。但是不,它不起作用。对于.NET标准项目,Media.stricin可以是NuGet。我目前正在从事一个Xamarin.iOS项目,因此我遇到了一个错误。错误:无法添加引用。包“Xamarin.Essentials”试图添加对“System.Drawing.Common.dll”的框架引用,但在GAC中找不到该引用。这可能是软件包中的一个bug。请与包的所有者联系以获得帮助。调用COM组件返回错误HRESULT E_FAIL。使用UIImagePickerController时代码中是否有UIImage?请检查我的更新答案。如果对你有帮助的话,别忘了接受它:)谢谢你的建议。我已经验证了它,它的工作!!!但是,使用FilePicker需要用户进行一些操作。我想在拍照后自动上传到web,请继续告诉我如何不使用FilePicker直接获取byte[],谢谢您的评论。是的,我知道第一个Media.Plungin代码不使用Picker。我知道第一种媒体。Plungin代码不使用选择器。但不幸的是,媒体插件不起作用。这就是为什么我现在在更新的选择器代码中运行它。
var imgDate = GetImageStreamAsBytes(stream);