2009-03-24 14 views
14

Sto provando a scrivere un'animazione su iPhone, senza molto successo, ottenendo arresti anomali e niente sembra funzionare.Creare un UIImmagine da altri due UIImages su iPhone

Quello che voglio fare sembra semplice, creare un UIImage e disegnare parte di un altro UIImage in esso, mi sono un po 'confuso con il contesto, i livelli e le cose.

Qualcuno potrebbe spiegare come scrivere qualcosa del genere (in modo efficiente), con codice di esempio?

+0

Realmente vuoi una nuova UIImage (che potresti salvare su disco o inviare tramite la rete per esempio) o vuoi semplicemente sovrapporre due UIImages sullo schermo, uno sull'altro? – rpetrich

+0

Suggerirei di ottenere un buon libro introduttivo. Attualmente sto leggendo questo: http://www.iphonedevbook.com/ ha capitoli su disegno e animazione, ecc. – bentford

+0

Voglio un UIImage reale, quindi posso usarlo in un'animazione. Ho letto alcune documentazioni, ma tutte mostrano come disegnare scatole e linee, non un'immagine reale che è più complessa. –

risposta

45

Per la cronaca, questo risulta essere abbastanza semplice - tutto quello che dovete sapere è da qualche parte nel seguente esempio:

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

Nel display retina, la qualità dell'immagine risultante è scadente. –

+3

per la modalità retina, usare 'UIGraphicsBeginImageContextWithOptions (size, NO, 0);' –

9

Voglio solo aggiungere un commento sulla risposta di cui sopra da dpjanes, perché è una buona risposta, ma apparirà blandamente su iPhone 4 (con display retina ad alta risoluzione), poiché "UIGraphicsGetImageFromCurrentImageContext()" non esegue il rendering alla massima risoluzione di un iPhone 4.

Usa "... WithOptions() " anziché. Ma dal momento che WithOptions non è disponibile fino a iOS 4.0, è possibile collegare debole (discussed here) quindi utilizzare il seguente codice di utilizzare solo la versione assunzioni se supportata:

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

questo dovrebbe essere un commento –

3

Ecco un esempio per unire due immagini che sono le stesse dimensioni in uno. Non so se questo è il migliore e non so se questo tipo di codice è pubblicato da qualche altra parte. Ecco i miei due centesimi.

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

Spero che questo aiuti.

Problemi correlati