如何解决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 举报,一经查实,本站将立刻删除。