2009-03-24 2 views
14

Я пытаюсь написать анимацию на iPhone без особых успехов, получить сбой и ничего не работает.Создайте UIImage из двух других UIImages на iPhone

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

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

+0

Вы действительно хотите новый UIImage (который вы можете сохранить на диск или отправить по сети, например), или вы просто хотите сложить два UIImages на экране, один поверх другого? – rpetrich

+0

Я бы предложил получить хорошую вступительную книгу. Я сейчас читаю этот: http://www.iphonedevbook.com/ у него есть главы по рисованию и анимации и т. Д. – bentford

+0

Я хочу фактический UIImage, поэтому я могу использовать его в анимации. Я прочитал некоторые документы, но они все показывают, как рисовать коробки и линии, а не реальную картину, которая является более сложной. – 2009-03-25 08:26:54

ответ

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

На экране сетчатки качество изображения результата плохое. –

+3

для режима сетчатки, используйте 'UIGraphicsBeginImageContextWithOptions (размер, НЕТ, 0);' –

9

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

Используйте «... WithOptions() вместо этого. Но поскольку WithOptions не доступен до прошивки 4.0, вы не могли бы слабое звено его (discussed here), затем используйте следующий код только использовать версию нанимает, если она поддерживается:

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

это должен быть комментарий –

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

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

Смежные вопросы