问题描述
我在 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 (将#修改为@)