2009-03-24 14 views
14

Ich versuche, eine Animation auf dem iPhone ohne viel Erfolg zu schreiben, Abstürze und nichts scheint zu funktionieren.Erstellen Sie ein UIImage aus zwei anderen UIImages auf dem iPhone

Was ich tun möchte erscheint einfach, erstellen Sie ein UIImage, und ziehen Sie einen Teil eines anderen UIImage hinein, ich war ein bisschen verwirrt mit dem Kontext und Schichten und so.

Könnte jemand bitte erklären, wie man so etwas (effizient) schreibt, mit Beispielcode?

+0

Wollen Sie eigentlich eine neue UIImage (die Sie auf der Festplatte speichern oder zum Beispiel über das Netzwerk senden können) oder wollen Sie nur zwei UImagages auf dem Bildschirm übereinander legen? – rpetrich

+0

Ich würde vorschlagen, ein gutes Einführungsbuch zu bekommen. Ich lese gerade dieses: http://www.iphonedevbook.com/ es hat Kapitel über Zeichnung und Animation etc .. – bentford

+0

Ich möchte eine tatsächliche UIImage, damit ich es in einer Animation verwenden kann. Ich lese einige Dokumentationen, aber sie alle zeigen, wie Boxen und Linien zu zeichnen, nicht ein tatsächliches Bild, das komplexer ist. –

Antwort

45

Für die Aufzeichnung, schaltet sich das recht einfach zu sein, aus - alles, was man ist irgendwo im Beispiel unten wissen müssen:

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

Im Retina-Display ist die Qualität des Ergebnisbildes schlecht. –

+3

für Retina-Modus, verwenden Sie 'UIGraphicsBeginImageContextWithOptions (Größe, NO, 0);' –

9

Ich mag nur oben durch dpjanes einen Kommentar über die Antwort schreiben, weil es ist eine gute Antwort, aber wird auf iPhone 4 (mit hochauflösender Retina-Anzeige) blocky aussehen, da "UIGraphicsGetImageFromCurrentImageContext()" nicht mit der vollen Auflösung eines iPhone 4 rendert.

Verwenden Sie "... WithOptions() " stattdessen. Aber da WithOptions ist nicht verfügbar, bis iOS 4.0, könnten Sie schwaches Glied es (discussed here) dann den folgenden Code verwenden, um nur die Mitarbeiter-Version zu verwenden, wenn es unterstützt wird:

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

Dies sollte ein Kommentar sein –

3

Hier ist ein Beispiel zwei Bilder zu verschmelzen, dass sind gleich groß. Ich weiß nicht, ob das das Beste ist und weiß nicht, ob diese Art von Code woanders veröffentlicht wird. Hier sind meine zwei Cent.

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

Hoffe, das hilft.