ios – 根据UIViewCGRect的大小将图像裁剪成正方形

ios – 根据UIViewCGRect的大小将图像裁剪成正方形,第1张

概述我有AVCaptureSession的实现,我的目标是让用户拍摄照片,只将图像的一部分保存在红色方块边框内,如下图所示: AVCaptureSession的previewLayer(相机)从(0,0)(左上角)跨越到我的相机控制栏(位于包含快门的视图的正上方)的底部.我的导航栏和控制栏是半透明的,所以相机可以显示. 我正在使用[captureSession setSessionPreset:AVC 我有AVCaptureSession的实现,我的目标是让用户拍摄照片,只将图像的一部分保存在红色方块边框内,如下图所示:

AVCaptureSession的prevIEwLayer(相机)从(0,0)(左上角)跨越到我的相机控制栏(位于包含快门的视图的正上方)的底部.我的导航栏和控制栏是半透明的,所以相机可以显示.

我正在使用[captureSession setSessionPreset:AVCaptureSessionPresetPhoto];以确保保存到相机胶卷的原始图像与Apple的相机一样.

用户将能够以纵向,横向左右拍摄照片,因此裁剪方法必须考虑到这一点.

到目前为止,我已经尝试使用这段代码裁剪原始图像:

DDLogVerbose(@"%@: Image crop rect: (%f,%f,%f)",THIS_file,self.imageCropRect.origin.x,self.imageCropRect.origin.y,self.imageCropRect.size.wIDth,self.imageCropRect.size.height);// Create new image context (retina safe)UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.imageCropRect.size.wIDth,self.imageCropRect.size.wIDth),NO,0.0);// Create rect for imageCGRect rect = self.imageCropRect;// Draw the image into the rect[self.captureManager.stillimage drawInRect:rect];// Saving the image,ending image contextUIImage *croppedImage = UIGraphicsGetimageFromCurrentimageContext();

但是,当我看着相机胶卷中的裁剪图像时,似乎已经压缩了原始图像,并且不像我想要的那样丢弃图像的顶部和底部.它也导致“裁剪”图像顶部的53像素的空白,可能是因为我的CGRect的位置.

这是CGRect的日志输出:

Image crop rect: (0.000000,53.000000,320.000000,322.000000)

这也描述了超视图中红色边框视图的框架.

有什么重要的我俯瞰吗?

附:原始图像尺寸(以纵向模式拍摄)为:

Original image size: (2448.000000,3264.000000)
解决方法 您可以使用CGImageCreateWithImageInRect裁剪图像:
CGImageRef imageRef = CGImageCreateWithImageInRect([uncroppedImage CGImage],bounds);UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];CGImageRelease(imageRef);
总结

以上是内存溢出为你收集整理的ios – 根据UIView / CGRect的大小将图像裁剪成正方形全部内容,希望文章能够帮你解决ios – 根据UIView / CGRect的大小将图像裁剪成正方形所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1095824.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存