CGContextClipToMask 未在 iOS 中裁剪图像
CGContextClipToMask is not clipping Image in iOS
我正在尝试将 UIImage
保存到照片库,并使用以下方法进行保存:
func savePhoto() {
UIGraphicsBeginImageContextWithOptions(CGSize(width: device.x, height: device.y), false, 2.0)
CGContextClipToRect(UIGraphicsGetCurrentContext(), self.drawingCanvas)
self.mainImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: device.x, height: device.y), blendMode: CGBlendMode.Normal, alpha: 1.0)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIImageWriteToSavedPhotosAlbum(image, self, "image:didFinishSavingWithError:contextInfo:", nil)
}
图像保存成功,但问题是图像没有裁剪到 CGRect drawingCanvas
的大小,但导出的图像是相应屏幕的大小。
由于drawingCanvas
只有屏幕的2/3左右的大小,所以最终的图像中留下了一大片空白的白色区域。
此外,如果我打印 CGContextGetClipBoundingBox(UIGraphicsGetCurrentContext())
,它会打印出正确的尺寸,与 drawingCanvas
相同。
有人知道为什么最终图像没有被剪裁吗?
CoreGraphics 的剪裁完全符合预期。 "Clip" 表示 "for subsequent drawing calls, draw only inside the rect I provide, and don't draw outside of it"。这就是为什么您看到的图像外有白色区域的原因。
剪辑 不会 使您的上下文变小,不会 会使结果图像变小。裁剪不等于裁剪
如果您希望结果图像更小,您应该更改传递给 UIGraphicsBeginImageContextWithOptions
的大小。它不必基于任何特定设备。
从你的问题中不清楚你真正想要什么尺寸。但是,如果您希望它基于绘图的大小 canvas,请改用它:
UIGraphicsBeginImageContextWithOptions(self.drawingCanvas, false, 2.0)
self.mainImageView.image?.drawInRect(CGRect(origin: CGPoint.zero, size:self.drawingCanvas))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
我正在尝试将 UIImage
保存到照片库,并使用以下方法进行保存:
func savePhoto() {
UIGraphicsBeginImageContextWithOptions(CGSize(width: device.x, height: device.y), false, 2.0)
CGContextClipToRect(UIGraphicsGetCurrentContext(), self.drawingCanvas)
self.mainImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: device.x, height: device.y), blendMode: CGBlendMode.Normal, alpha: 1.0)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIImageWriteToSavedPhotosAlbum(image, self, "image:didFinishSavingWithError:contextInfo:", nil)
}
图像保存成功,但问题是图像没有裁剪到 CGRect drawingCanvas
的大小,但导出的图像是相应屏幕的大小。
由于drawingCanvas
只有屏幕的2/3左右的大小,所以最终的图像中留下了一大片空白的白色区域。
此外,如果我打印 CGContextGetClipBoundingBox(UIGraphicsGetCurrentContext())
,它会打印出正确的尺寸,与 drawingCanvas
相同。
有人知道为什么最终图像没有被剪裁吗?
CoreGraphics 的剪裁完全符合预期。 "Clip" 表示 "for subsequent drawing calls, draw only inside the rect I provide, and don't draw outside of it"。这就是为什么您看到的图像外有白色区域的原因。
剪辑 不会 使您的上下文变小,不会 会使结果图像变小。裁剪不等于裁剪
如果您希望结果图像更小,您应该更改传递给 UIGraphicsBeginImageContextWithOptions
的大小。它不必基于任何特定设备。
从你的问题中不清楚你真正想要什么尺寸。但是,如果您希望它基于绘图的大小 canvas,请改用它:
UIGraphicsBeginImageContextWithOptions(self.drawingCanvas, false, 2.0)
self.mainImageView.image?.drawInRect(CGRect(origin: CGPoint.zero, size:self.drawingCanvas))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()