2010-09-22 11 views
9

Ad esempio, il file png è 1200 (h) x 50 (w) pixel, come posso tagliare il png e carichi in 6 UIImage s, ogni 200 (h) x 50 (w). Grazie!Come tagliare una grande sprite png in UIImages più piccoli?

EDIT - grazie alla risposta di Michal, il codice finale:

CGImageRef imageToSplit = [UIImage imageNamed:@"huge.png"].CGImage; 
CGImageRef partOfImageAsCG = CGImageCreateWithImageInRect(imageToSplit, CGRectMake(0, 0, 50, 50)); 

UIImage *partOfImage = [UIImage imageWithCGImage:partOfImageAsCG]; 
// ... 

CGImageRelease(partOfImageAsCG); 

risposta

13

Guardate la funzione CGImageCreateWithImageInRect. Funziona con CGImage, ma è facile convertire tra quello e UIImage.

Ecco un esempio (digitato dalla memoria, potrebbe non compilare):

CGImageRef imageToSplit = [UIImage imageNamed:@"huge.png"].CGImage; 
CGImageRef partOfImageAsCG = CGImageCreateWithImageInRect(imageToSplit, CGRectMake(0, 0, 200, 50)); 
CGRelease(imageToSplit); 
UIImage *partOfImage = [UIImage imageWithCGImage:partOfImageAsCG]; 
CGImageRelease(partOfImageAsCG); 
+4

Quello che vuoi è CGImageRelease() non CGRelease() –

+1

Grazie Andrew, ho risolto e alzato il tuo commento. – Michal

2

Metodo riutilizzabile:

-(UIImage*)ExtractImageOn:(CGPoint)pointExtractedImg ofSize:(CGSize)sizeExtractedImg FromSpriteSheet:(UIImage*)imgSpriteSheet 
{ 
    UIImage *ExtractedImage; 

    CGRect rectExtractedImage; 

    rectExtractedImage=CGRectMake(pointExtractedImg.x,pointExtractedImg.y,sizeExtractedImg.width,sizeExtractedImg.height); 

    CGImageRef imgRefSpriteSheet=imgSpriteSheet.CGImage; 

    CGImageRef imgRefExtracted=CGImageCreateWithImageInRect(imgRefSpriteSheet,rectExtractedImage); 

    ExtractedImage=[UIImage imageWithCGImage:imgRefExtracted]; 

    CGImageRelease(imgRefExtracted); 

    //CGImageRelease(imgRefSpriteSheet); I have commented it because we should not release the object that we don't own..So why do we release imgRefExtracted alone? bcuz it has name create in its method so the ownership comes to us so we have to release it. 

    return ExtractedImage; 


} 

FYI:

Benche 'è stato risposto Chiaramente ho pensato di dargli un semplice snoppet di codice "Copia-Incolla" riutilizzabile sarebbe un grande aiuto t o programmatori e attribuisco la risposta a michal

Problemi correlati