let layer = UIApplication.sharedApplication().keyWindow!.layer let scale = UIScreen.mainScreen().scale UIGraphicsBeginImageContextWithOptions(layer.frame.size,false,scale); layer.renderInContext(UIGraphicsGetCurrentContext()) let screenshot = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext()
let crop = CGRectMake(0,//"start" at the upper-left corner self.view.bounds.width,//include half the width of the whole screen self.view.bounds.height + self.navigationController!.navigationBar.frame.height) //include the height of the navigationBar and the height of view let cgImage = CGImageCreateWithImageInRect(screenshot.CGImage,crop) let image: UIImage = UIImage(CGImage: cgImage)!
此代码导致图像只显示屏幕的一小部分,一个矩形从屏幕的左上角开始(0,0),并向右延伸不到屏幕宽度的一半,然后向下延伸小于屏幕高度的一半.不过,我想要包括整个屏幕,除了标签栏占用的区域.有没有这种方法来裁剪它?
解决方法
The new image is created by
1) adjustingrect
to integral bounds by callingCGRectIntegral
;
2) intersecting the result with a rectangle with origin (0,0) and size
equal to the size ofimage
;
3) referencing the pixels within the resulting rectangle,treating the
first pixel of the image data as the origin of the image.
If the resulting rectangle is the null rectangle,this function returns
NULL.If W and H are the width and height of image,respectively,then the
point (0,0) corresponds to the first pixel of the image data; the point
(W-1,0) is the last pixel of the first row of the image data; (0,H-1)
is the first pixel of the last row of the image data; and (W-1,H-1) is
the last pixel of the last row of the image data.
你需要有这样的裁剪功能.您可能需要调整bottomBarHeight的计算
func takeScreenshot(sender: AnyObject) { let layer = UIApplication.sharedApplication().keyWindow!.layer let scale = UIScreen.mainScreen().scale UIGraphicsBeginImageContextWithOptions(layer.frame.size,scale); layer.renderInContext(UIGraphicsGetCurrentContext()) let screenshot = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() let croppedImage = self.cropImage(screenshot) } func cropImage(screenshot: UIImage) -> UIImage { let scale = screenshot.scale let imgSize = screenshot.size let screenHeight = UIScreen.mainScreen().applicationFrame.height let bound = self.view.bounds.height let navHeight = self.navigationController!.navigationBar.frame.height let bottomBarHeight = screenHeight - navHeight - bound let crop = CGRectMake(0,//"start" at the upper-left corner (imgSize.width - 1) * scale,//include half the width of the whole screen (imgSize.height - bottomBarHeight - 1) * scale) //include the height of the navigationBar and the height of view let cgImage = CGImageCreateWithImageInRect(screenshot.CGImage,crop) let image: UIImage = UIImage(CGImage: cgImage)! return image }