2011-08-21 11 views
6

sto lavorando su iphone app in cui devo unire tre immagini e renderle immagine singola. Intendo dire che ho un'immagine di sfondo, un'immagine di intestazione e un'immagine inferiore, ho bisogno di combinare tutto questo per creare una singola immagine in modo da poterla usare per postare su Facebook. Grazie.Iphonesdk Unisci tre immagini due immagini singole

* EDIT * so che questo codice per due immagini, ma come posso usarlo per tre immagini:

UIGraphicsBeginImageContext(saveView.bounds.size); 
[saveView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+1

controllare questo fuori - http://stackoverflow.com/questions/5299452/how-can-i-crop-an-image-with-mask-and-combine-it-with-another-image-background –

+0

è basato su opengl. Preferisco qualsiasi altra alternativa. –

+0

Il codice che ho postato per voi lavorerà su tutte le immagini che il telefono può gestire in memoria - vedere la mia risposta aggiornata con il codice esteso – shein

risposta

10

si può semplicemente allineare insieme in un unico UIView (credo che anche fuori dallo schermo, ma non ho ancora controllato) - e poi basta convertire tale UIView a un UIImage utilizzando QuartzCode:

UIGraphicsBeginImageContext(myView.bounds.size); 
[myView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

poi trasformarla in un formato - come PNG per a stance:

NSData *imageData = UIImagePNGRepresentation(image); 

Quindi l'invio non dovrebbe essere troppo difficile.

EDIT Ecco un esempio esteso si può anche vedere di 3 immagini - si può ovviamente usare Interface Builder e Outlet invece di scrivere tutto - ma è possibile copiare incollare questo per cercare:

UIImageView *imgView1, *imgView2, *imgView3; 
imgView1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1"]]; 
imgView2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image2"]]; 
imgView3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image3"]]; 

imgView1.frame = CGRectMake(0, 0, 50, 50); 
imgView2.frame = CGRectMake(50, 50, 100, 100); 
imgView3.frame = CGRectMake(100, 100, 200, 200); 

[referenceView addSubview:imgView1]; 
[referenceView addSubview:imgView2]; 
[referenceView addSubview:imgView3]; 

UIGraphicsBeginImageContext(referenceView.bounds.size); 
[referenceView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

resultView = [[UIImageView alloc] initWithImage:finalImage]; 
resultView.frame = CGRectMake(0, 0, 320, 480); 
[self.view addSubview:resultView]; 

referenceView.hidden = YES; 

Ho controllato e l'UIView deve essere disegnabile/visibile nel momento in cui si chiama renderInContext (può essere fuori schermo ma non può essere nascosto o alpha = 0 perché quindi sarà reso invisibile). Quindi lo metti off-screen o lo nascondi immediatamente dopo il disegno

+0

Ho trovato che non avevo bisogno di aggiungere il referenceView alla vista principale per renderlo. Tuttavia, ho avuto un problema con il rendering del contesto con il mio codice iniziale, ma dopo averlo cambiato la mia risposta sembra funzionare correttamente. – Christopher

2

La risposta di Shein mi ha aiutato ma ho scoperto che non avevo bisogno di aggiungere l'UIView alla vista principale per renderlo. Ecco un esempio di aggiunta di testo a un'immagine ...

UIImage *image = [UIImage imageNamed:@"toolbar_icon"]; // image is 20 x 20 .png 

    UIView *tempView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)]; 
    [tempView addSubview:[[UIImageView alloc] initWithImage:image]]; 

    UILabel *label = [[UILabel alloc] initWithFrame:tempView.frame]; 
    [label setText:[NSString stringWithFormat:@"%d", [self countValue]]]; 
    [label setFont:[UIFont systemFontOfSize:22.0]]; 
    [label setTextColor:[UIColor lightTextColor]]; 
    [label setTextAlignment:UITextAlignmentCenter]; 
    [label setBackgroundColor:[UIColor clearColor]]; 
    [tempView addSubview:label]; 

    UIGraphicsBeginImageContext(tempView.bounds.size); 
    [tempView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    UIBarButtonItem *countItem = [[UIBarButtonItem alloc] initWithImage:finalImage 
                     style:UIBarButtonItemStyleBordered 
                     target:self 
                     action:@selector(countAction:)]; 

NOTA: improvvisamente ho capito la mia risposta include l'aggiunta di un'etichetta a un'immagine che è quello che stavo cercando di fare prima di trovare questo. Riferimento Combine Label Text With Image