我知道如何拍摄iPhone / iPad屏幕的常规矩形屏幕截图(下面的代码)。但是,我正在寻找一种方法来获取旋转任意度数的屏幕截图
如何使用任意旋转的矩形截取UIView
的屏幕截图?
//this is the rotation of the rectangle
NSNumber* savedRotation = [NSNumber numberWithFloat: 0.35]; //radians, get the real number from a gesture recognizer
//create a screenshot
CGSize screenshotSize;
//screenshot size has to be adjusted for the rotation, or multiplied by the square root of 2
if( UIDeviceOrientationIsLandscape([[UIApplication sharedApplication]statusBarOrientation]))
{
screenshotSize = CGSizeMake(1024,768);
}else
{
screenshotSize = CGSizeMake(768, 1024);
}
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
UIGraphicsBeginImageContextWithOptions(screenshotSize, NO, [UIScreen mainScreen].scale);
else
UIGraphicsBeginImageContext(screenshotSize);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
//this does the proper rotation, but there's some kind of extra translation required to make it capture what's under the rectangle
CGContextRotateCTM(context, -savedRotation.floatValue);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
CGContextRestoreGState(context);
这是上面代码的结果,它似乎部分工作,但需要一些额外的CTM转换才能完美匹配捕获矩形。另外,我需要将上下文的边界更改为更宽(可能是1024 * sqrt(2)宽度和高度)以允许任何旋转而不剪切。
答案 0 :(得分:1)
以下是基于简单矩形裁剪图像所需的代码。
我不确定你是如何跟踪矩形的旋转的,但是应该从那里开始直接应用这个解决方案;
// Create rectangle from middle of current image
CGRect croprect = CGRectMake(image.size.width / 4, image.size.height / 4 ,
(image.size.width / 2), (image.size.height / 2));
// Draw new image in current graphics context
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], croprect);
// Create new cropped UIImage
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
希望它有所帮助。