Xamarin.Forms - 点击自定义渲染相机中的图像&在Xamarin.form(xaml)中显示

时间:2018-04-06 13:54:10

标签: xamarin.forms xamarin.android

我是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();
}

有人可以帮我吗?

0 个答案:

没有答案