我有一个可以在上面绘画的视图。我保存了最小和最大x和y触摸位置,以指定在其中绘制的矩形。我通过将矩形作为框架添加一个视图来测试矩形是否正确,并且一切正常。但是,当我将图像裁剪为矩形时,它会给我其他部分。
guard let cg_img = self.asImage().cgImage?.cropping(to: CGRect(x: minX, y: minY, width: maxX-minX, height: maxY-minY)) else { return }
我的asImage方法:
extension UIView {
func asImage() -> UIImage {
let renderer = UIGraphicsImageRenderer(bounds: bounds)
return renderer.image { rendererContext in
layer.render(in: rendererContext.cgContext)
}
}
}
我可能错过了一些有关裁剪方法的信息,但我发现没有什么帮助。
答案 0 :(得分:1)
您从UIImage
检索UIView
的方法将返回带有设备scale
的图像。而且您的坐标可能以“点”为单位。但是CGImage
坐标以像素为单位。您必须相应地转换坐标(按图像比例)。例如。如果您使用的是@ 3x设备,则在裁剪之前将这些值乘以原始图像的scale
。
这对于您的屏幕快照来说不是问题,但是为了将来的读者,请注意,CGRect
作物中的CGImage
会受到图像旋转的影响,例如相机拍摄的人像图像。参见imageOrientation
。底线除了前面提到的scale
问题外,还请注意,width
的{{1}}和height
可能会与{{1} }。
答案 1 :(得分:0)
在您
之后guard let cg_img = self.asImage().cgImage?.cropping(to: CGRect(x: minX, y: minY, width: maxX-minX, height: maxY-minY)) else { return }
做到这一点
let image = UIImage(cgImage: cg_img)
let imageView = UIImageView(image: image)
imageView.contentMode = .center
imageView.contentScaleFactor = UIScreen.main.scale
view.addSubview(imageView)
使图像具有合适的比例。