从iPhone上的其他两个UIImages创建一个UIImage

时间:2009-03-24 21:08:22

标签: iphone uiimage

我正试图在iPhone上写一个动画,没有太大的成功,崩溃似乎没什么用。

我想做的事情看起来很简单,创建一个UIImage,并将另一个UIImage的一部分绘制到其中,我对上下文和图层以及其他内容感到困惑。

有人可以通过示例代码解释如何编写类似的内容(高效)吗?

3 个答案:

答案 0 :(得分:45)

为了记录,事实证明这很简单 - 你需要知道的一切都在下面的例子中:

+ (UIImage*) addStarToThumb:(UIImage*)thumb
{
   CGSize size = CGSizeMake(50, 50);
   UIGraphicsBeginImageContext(size);

   CGPoint thumbPoint = CGPointMake(0, 25 - thumb.size.height / 2);
   [thumb drawAtPoint:thumbPoint];

   UIImage* starred = [UIImage imageNamed:@"starred.png"];

   CGPoint starredPoint = CGPointMake(0, 0);
   [starred drawAtPoint:starredPoint];

   UIImage* result = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();

   return result;
}

答案 1 :(得分:9)

我只是想通过dpjanes添加关于上面答案的评论,因为它是一个很好的答案,但在iPhone 4(具有高分辨率视网膜显示)上会看起来很块,因为“UIGraphicsGetImageFromCurrentImageContext()”不能完整渲染解析iPhone 4。

使用“... WithOptions()”代替。但由于在iOS 4.0之前无法使用WithOptions,因此您可以将其弱化(discussed here),然后使用以下代码仅在支持时使用hires版本:

if (UIGraphicsBeginImageContextWithOptions != NULL) {
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
}
else {
    UIGraphicsBeginImageContext();
}

答案 2 :(得分:3)

以下是将两个大小相同的图像合并为一个示例。我不知道这是否是最好的,不知道这种代码是否发布在其他地方。这是我的两分钱。

+ (UIImage *)mergeBackImage:(UIImage *)backImage withFrontImage:(UIImage *)frontImage
{

    UIImage *newImage;

    CGRect rect = CGRectMake(0, 0, backImage.size.width, backImage.size.height);

    // Begin context
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);

    // draw images
    [backImage drawInRect:rect];
    [frontImage drawInRect:rect];

    // grab context
    newImage = UIGraphicsGetImageFromCurrentImageContext();

    // end context
    UIGraphicsEndImageContext();

    return newImage;
}

希望这有帮助。