我是Xamarin.forms开发的新手。我陷入了以下情景。 我有MainPage.xaml文件,其中包含自定义渲染的摄像头视图&一个单击图片的按钮,在.Droid解决方案中我有'CustomRenderer.cs'和& 'CameraPreview.cs'文件将android的原生相机视图渲染到MainPage.xaml,'CameraClickImplementation.cs'实现'PhotoClick.cs'界面点击照片&节省外部存储空间。目前我已成功点击图片&将它保存在我的Android设备的外部存储器上。 现在我的要求是在将外部存储上的图像保存到MainPage.xaml.cs后得到一些回调。即从'CameraClickImplementation.cs'到MainPage.xaml.cs,在MainPage.xaml上显示它。
以下是我的MainPage.xaml的某些部分的代码。
<StackLayout x:Name="CamArea" AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0.5,0.5,1,1">
<local:CameraPreview Camera="Rear" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" />
</StackLayout>
以下是我的MainPage.xaml.cs文件的某些部分的代码。
void GalleryClicked(object sender, EventArgs e)
{
var gallery = DependencyService.Get<IPhotoClick>();
if (gallery != null)
{
gallery.TakePic();
}
}
以下是我的CameraClickImplementation.cs文件的某些部分的代码。
public void OnPictureTaken(byte[] data, Camera camera)
{
Android.Content.Context context = MainActivity.Instance;
Android.Net.Uri uriTarget = context.ContentResolver.Insert(Android.Provider.MediaStore.Images.Media.ExternalContentUri, new Android.Content.ContentValues());
// String SHARED_FILE_NAME = "shared.png";
SavePictureToDisk("sample",data);
//camera.StartPreview();
}
public void SavePictureToDisk(string filename, byte[] imageData)
{
Android.Content.Context context = MainActivity.Instance;
// var dir = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath);
var dir= Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
string name = filename + ".jpg";
// string filePath = System.IO.Path.Combine(pictures, name);
string filePath = System.IO.Path.Combine(dir, name);
try
{
System.IO.File.WriteAllBytes(filePath, imageData);
}
catch (System.Exception e)
{
System.Console.WriteLine(e.ToString());
}
Toast.MakeText(context, "Image saved", ToastLength.Long).Show();
}
有人可以帮我吗?