以编程方式将图像粘贴到图像上

时间:2012-11-05 08:37:01

标签: iphone objective-c ios uiimageview

我有这个功能,截取我在我的应用程序上的小UIView的屏幕截图,我的问题是我想在此图像中添加位于我的图像文件夹中的背景。我要添加的背景没有显示在当前视图上,我只是想在我保存图像之前以编程方式将其粘贴在屏幕截图图像后面。有可能吗?

(我不想创建一个带有背景的新视图,而不是添加屏幕截图,而不是重新拍摄屏幕。这太过分了)

让我们说这是已拍摄的影像:

  ______
 /      \
/        \
\        /
 \______/

这是图像的背景图像:

 _________________
|                 |
|     ______      |
|    /      \     |
|   /        \    |
|   \        /    |
|    \______/     |
|                 |
|_________________|

这是我的代码:

- (void)takeScreenShotAndSaveIt:(CGPoint)center
{
    // IMPORTANT: using weak link on UIKit
    if(UIGraphicsBeginImageContextWithOptions != NULL)
    {
        UIGraphicsBeginImageContextWithOptions(smallview.frame.size, NO, 0.0);
    } else {
        UIGraphicsBeginImageContext(smallview.frame.size);
    }

    [smallview.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    // Save image to iPhone documents directory
    NSData * imgData = [[NSData alloc] initWithData:UIImagePNGRepresentation(viewImage)];
    NSString * filename = [NSString stringWithFormat:@"MeasureScreenShot.png"];
    NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * documentsDirectory = [paths objectAtIndex:0];
    NSString * path = [documentsDirectory stringByAppendingPathComponent:filename];
    [imgData writeToFile:path atomically:YES];
}

1 个答案:

答案 0 :(得分:1)

如果我理解你想要做什么,试试这个:

- (void)takeScreenShotAndSaveIt:(CGPoint)center
{
  ...
  [backgroundImageView.layer renderInContext:UIGraphicsGetCurrentContext()];
  [smallview.layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  ...

其中backgroundImageView是包含背景图像的UIImageView。您只需在同一上下文中呈现两个视图。如果您希望将背景作为图像而不是视图处理,则可以使用:

[bckImage drawAtPoint:CGPointZero blendMode:kCGBlendModeNormal alpha:1.0];