AVCaptureSession 图像大小压缩如 IOS 默认摄像头

问题描述

我在 Xamarin IOS 简单应用程序中实现了使用 AVCaptureSession 和 AVCapturePhotoCaptureDelegate 拍照。 一切正常,但我的问题是图像大小。

在我的代码 AVCaptureSession.PresetPhoto 中使用类似 AVCaptureSession 中的会话预设,我获得了非常大的照片尺寸。

经过一些研究,我编写了获得正确格式比例的方法

      public UIImage RescaleImage(UIImage img) {
       var format = new UIGraphicsImageRendererFormat();
       format.Scale = 1;
       var renderer = new UIGraphicsImageRenderer(img.Size,format);
       return renderer.CreateImage(c =>  img.Draw(CGPoint.Empty) );
     }

之后我的照片大小与IOS相机的分辨率相同(3024 x 4032)。 现在我应该压缩像jpg这样的图像。 //图片是UIImage

                 var jpgImag = Image.AsJPEG(0f);
                 // Converting UIImage to byte[] array
                 Byte[] myByteArray = new Byte[jpgImag.Length];
                 System.Runtime.InteropServices.Marshal.copy(jpgImag.Bytes,myByteArray,Convert.ToInt32(jpgImag.Length));

这是我的捕获会话代码

CaptureSession = new AVCaptureSession();
     CaptureSession.SessionPreset = AVCaptureSession.PresetPhoto;
     CaptureOutput = new AVCapturePhotoOutput();
     CaptureSession.AddOutput(CaptureOutput);
     CaptureDevice = AVCaptureDevice.GetDefaultDevice(AVMediaType.Video);
     NSError Error;
     // Prepare device for configuration
     if (!CaptureDevice.LockForConfiguration(out Error)) {
        // There has been an issue,abort
        Console.WriteLine("Error: {0}",Error.LocalizedDescription);
        CaptureDevice.UnlockForConfiguration();
        return;
     }
     CaptureDevice.FocusMode = AVCaptureFocusMode.ContinuousAutoFocus;
     // Unlock configuration
     CaptureDevice.UnlockForConfiguration();
     CaptureDeviceInput = AVCaptureDeviceInput.FromDevice(CaptureDevice);
     CaptureSession.AddInput(CaptureDeviceInput);

我的设置:

  var settings = AVCapturePhotoSettings.Create();
        var previewPixelType = settings.AvailablePreviewPhotoPixelFormatTypes.First();
        settings.PreviewPhotoFormat = new NSDictionary<Nsstring,NSObject>(CVPixelBuffer.PixelFormatTypeKey,settings.AvailablePreviewPhotoPixelFormatTypes[0]);
        settings.FlashMode = AVCaptureFlashMode.Auto;
        return settings;

例如,如果我保存 myByteArray,我将获得一个 20MB 的文件。如果我用 ios 相机拍摄同一张照片,我会获得 3MB 的图像(例如)。

两幅图像之间的唯一区别是位深度。 我的应用是 32. IOS 相机 24 和 dpi 我的应用是 96。IOS 相机 72

我的问题是:

如何设置我的 AVCaptureSession 以获得与 IOS 相机更相似的结果? (swift代码也可以)

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)