Xamarin Android图像捕获相机使用意图ActionImageCapture,图像质量低

isr3a4wc  于 2023-01-10  发布在  Android
关注(0)|答案(1)|浏览(156)

我是新的Xamarin Android。现在我试图捕捉图像的相机和imageview显示,但我面临的问题是,图像质量从相机捕捉是低。我做的研究,从谷歌,我只找到了解决方案,这是保存图像捕捉到的文件,并从文件检索。但解决方案只适用于android工作室和xamarin的形式。
这是调用图像捕获的意图的代码

Intent intent = new Intent(MediaStore.ActionImageCapture);
 StartActivityForResult(intent, 1000);

这是活动结果的编码

if ((requestCode == PickImageId) && (resultCode == Android.App.Result.Ok) && (data != null))
{
                base.OnActivityResult(requestCode, resultCode, data);
                bitmap = (Bitmap)data.Extras.Get("data");                             
                var dir = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDcim);
                string filename = System.DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg";
                string filePath = System.IO.Path.Combine(dir + "/Camera/", filename);
                using (var stream = new MemoryStream())
                {
                    bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100, stream);
                    byte[] bitmapData = stream.ToArray();
                    try
                    {
                        System.IO.File.WriteAllBytes(filePath, bitmapData);
                        bitmap = BitmapFactory.DecodeByteArray(bitmapData, 0, bitmapData.Length);
                        imgview.SetImageBitmap(bitmap);
                    }
                    catch (Exception ex)
                    {
                        System.Console.WriteLine(ex.ToString());
                    }
                }               
}

我已经尝试将图像保存到手机文件夹中,文件夹为“DCIM/Camera/xxx.jpg”。捕获并保存在文件夹中的图像是成功的,但图像质量仍然很低。
有什么办法可以提高图像的质量吗?
对不起,我的英语不好,请给我建议或解决办法。
谢谢你的帮助

iqxoj9l9

iqxoj9l91#

您好,您可以使用Xamarin Essential Media Picker来拍摄照片。下面是一个示例代码:

using Xamarin.Essentials;
   string PhotoPath="";

   public async Task TakePhotoAsync()
    {
        try
        {
            var photo = await MediaPicker.CapturePhotoAsync();
            await LoadPhotoAsync(photo);
        }
        catch (FeatureNotSupportedException fnsEx)
        {
            // Feature is not supported on the device
        }
        catch (PermissionException pEx)
        {
            // Permissions not granted
        }
        catch (Exception ex)
        {
            Console.WriteLine($"CapturePhotoAsync THREW: {ex.Message}");
        }
    }

    public async Task LoadPhotoAsync(FileResult photo)
    {
        // canceled
        if (photo == null)
        {
            PhotoPath = null;
            return;
        }
        // save the file into local storage
        var newFile = Path.Combine(FileSystem.CacheDirectory, photo.FileName); //or any other Storage Directory
        using (var stream = await photo.OpenReadAsync())
        using (var newStream = File.OpenWrite(newFile))
            await stream.CopyToAsync(newStream);

        PhotoPath = newFile;
        }

相关问题