ios – Swift:裁剪截图

我有整个屏幕截图,截图,使用以下内容生成
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) adjusting rect to integral bounds by calling CGRectIntegral;
2) intersecting the result with a rectangle with origin (0,0) and size
equal to the size of image;
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
}

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...