Создать UIImage из двух других UIImage на iPhone - PullRequest
14 голосов
/ 25 марта 2009

Я пытаюсь написать анимацию на iPhone, но без особого успеха получаю сбои и ничего не получается.

То, что я хочу сделать, кажется простым, создать UIImage и нарисовать в нем часть другого UIImage, я немного запутался с контекстом, слоями и прочим.

Может кто-нибудь объяснить, как написать что-то подобное (эффективно), с примером кода?

Ответы [ 3 ]

45 голосов
/ 27 апреля 2009

Для справки, это оказывается довольно просто - все, что вам нужно знать, где-то в следующем примере:

+ (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;
}
9 голосов
/ 28 февраля 2011

Я просто хочу добавить комментарий об указанном выше ответе dpjanes, потому что это хороший ответ, но он будет выглядеть блочно на iPhone 4 (с дисплеем сетчатки высокого разрешения), так как "UIGraphicsGetImageFromCurrentImageContext ()" не отображается полностью разрешение iPhone 4.

Вместо этого используйте «... WithOptions ()». Но так как WithOptions недоступен до iOS 4.0, вы можете ослабить его ( обсуждается здесь ), а затем использовать следующий код, чтобы использовать только версию Hires, если она поддерживается:

if (UIGraphicsBeginImageContextWithOptions != NULL) {
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
}
else {
    UIGraphicsBeginImageContext();
}
3 голосов
/ 11 ноября 2013

Вот пример объединения двух изображений одинакового размера в одно. Я не знаю, является ли это лучшим и не знаю, размещен ли такой код где-то еще Вот мои два цента.

+ (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;
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...