带有子视图的 UIImageView 屏幕截图剪辑
UIImageView screenshot clipping with subviews
我正在尝试截取一个 UIImageView 的屏幕截图,它具有可移动、可缩放和可旋转的 alpha(爱心,心脏具有 alpha 透明度,黑色边缘)- 在不动的 UIImageView 之上。
我想要完成的是允许用户将心形移动到顶部(已经有为此工作的代码)- 然后当他们单击下一步按钮时,它将截取心形的屏幕截图并捕获下面的图像。我将此代码通过截屏图像传递到 segue。这就是我目前所拥有的,这就是结果。
这是我当前的代码和 before/afters:
moveableMaskImageView
是心形UIImageView
outletPreview
是下面的 UIImageView
#pragma screenshotImage:
- (UIImage *)screenShotImage {
CGRect rect = [moveableMaskImageView frame];
NSLog(@"Screenshot X: %f Screenshot Y: %f Screenshot W: %f Screenshot H: %f",rect.origin.x,rect.origin.y,rect.size.width,rect.size.height);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[outletPreview.layer renderInContext:context];
[moveableMaskImageView.layer renderInContext:context];
UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return capturedImage;
}
之前(定位):
之后:
我想问题是您只看到了所选内容的四分之一。
尝试替换
这个
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0f);
有了这个
CGSize *size = CGSizeMake(rect.size.x *2, rect.size.y *2);
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
我找到了问题的答案 - 我希望这对任何人都有帮助,因为它让我困惑了一段时间:
我没有使用我的屏幕截图功能来剪辑图像 - 我使用了我在互联网上找到的这段代码:
- (UIImage*)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect {
UIGraphicsBeginImageContext(outletContainer.frame.size);/// use your screen or photo frame
[outletContainer.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGImageRef imageRef = CGImageCreateWithImageInRect([screenshot CGImage], rect);
UIImage *cropped = [UIImage imageWithCGImage:imageRef];
/* no origin .....
UIGraphicsBeginImageContext(tempview.frame.size);
[[self.photo layer] renderInContext:UIGraphicsGetCurrentContext()];
cropped= UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
*/
return cropped;
}
我正在尝试截取一个 UIImageView 的屏幕截图,它具有可移动、可缩放和可旋转的 alpha(爱心,心脏具有 alpha 透明度,黑色边缘)- 在不动的 UIImageView 之上。
我想要完成的是允许用户将心形移动到顶部(已经有为此工作的代码)- 然后当他们单击下一步按钮时,它将截取心形的屏幕截图并捕获下面的图像。我将此代码通过截屏图像传递到 segue。这就是我目前所拥有的,这就是结果。
这是我当前的代码和 before/afters:
moveableMaskImageView
是心形UIImageView
outletPreview
是下面的 UIImageView
#pragma screenshotImage:
- (UIImage *)screenShotImage {
CGRect rect = [moveableMaskImageView frame];
NSLog(@"Screenshot X: %f Screenshot Y: %f Screenshot W: %f Screenshot H: %f",rect.origin.x,rect.origin.y,rect.size.width,rect.size.height);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[outletPreview.layer renderInContext:context];
[moveableMaskImageView.layer renderInContext:context];
UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return capturedImage;
}
之前(定位):
之后:
我想问题是您只看到了所选内容的四分之一。
尝试替换
这个
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0f);
有了这个
CGSize *size = CGSizeMake(rect.size.x *2, rect.size.y *2);
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
我找到了问题的答案 - 我希望这对任何人都有帮助,因为它让我困惑了一段时间:
我没有使用我的屏幕截图功能来剪辑图像 - 我使用了我在互联网上找到的这段代码:
- (UIImage*)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect {
UIGraphicsBeginImageContext(outletContainer.frame.size);/// use your screen or photo frame
[outletContainer.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGImageRef imageRef = CGImageCreateWithImageInRect([screenshot CGImage], rect);
UIImage *cropped = [UIImage imageWithCGImage:imageRef];
/* no origin .....
UIGraphicsBeginImageContext(tempview.frame.size);
[[self.photo layer] renderInContext:UIGraphicsGetCurrentContext()];
cropped= UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
*/
return cropped;
}