2009-03-24 10 views
14

Estoy tratando de escribir una animación en el iPhone, sin mucho éxito, obteniendo bloqueos y nada parece funcionar.Crea un UIImage de otros dos UIImages en el iPhone

Lo que quiero hacer parece simple, crear un UIImage y dibujar parte de otro UIImage en él, me confundí un poco con el contexto y las capas y esas cosas.

¿Podría alguien explicar cómo escribir algo así (de manera eficiente), con un código de ejemplo?

+0

¿De verdad quieres un nuevo UIImage (que puedes guardar en el disco o enviar a través de la red, por ejemplo) o solo quieres poner dos UIImages en la pantalla, uno encima del otro? – rpetrich

+0

Sugeriría obtener un buen libro introductorio. Actualmente estoy leyendo este: http://www.iphonedevbook.com/ tiene capítulos sobre dibujo y animación, etc. – bentford

+0

Quiero un UIImage real, así que puedo usarlo en una animación. Leí algunos documentos, pero todos muestran cómo dibujar cajas y líneas, no una imagen real que es más compleja. –

Respuesta

45

Para el registro, esto resulta ser bastante sencillo - todo lo que necesita saber está en algún lugar en el siguiente ejemplo:

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

En la pantalla retina, la calidad de la imagen resultante es deficiente. –

+3

para modo retina, use 'UIGraphicsBeginImageContextWithOptions (tamaño, NO, 0);' –

9

sólo quiero añadir un comentario sobre la respuesta anterior por dpjanes, porque es una buena respuesta pero se verá como un bloque en el iPhone 4 (con pantalla Retina de alta resolución), ya que "UIGraphicsGetImageFromCurrentImageContext()" no se renderiza con la resolución completa de un iPhone 4.

Usar "... WithOptions() "en cambio". Pero desde WithOptions no está disponible hasta iOS 4.0, se podía eslabón débil que (discussed here) a continuación, utilizar el siguiente código para utilizar sólo la versión contrataciones si es compatible:

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

esto debería ser un comentario –

3

Aquí se muestra un ejemplo de fusionar dos imágenes que son del mismo tamaño en uno. No sé si esto es lo mejor y no sé si este tipo de código se publica en otro lugar. Aquí están mis dos centavos.

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

Espero que esto ayude.

Cuestiones relacionadas