Как разрезать большой спрайт png на меньшие UIImages?

например, файл png составляет 1200 (h) x 50 (w) пикселей, как я могу вырезать png и нагрузки в 6 UIImages, каждые 200 (h) x 50 (w). Спасибо!

EDIT-благодаря ответу Михала, окончательный код:

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

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

 CGImageRelease(partOfImageAsCG);

2 ответов


посмотрите на функцию CGImageCreateWithImageInRect. Он работает с CGImage, но его легко конвертировать между этим и UIImage.

вот пример (набранный из памяти, может не компилироваться):

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);

метод многоразовый:

-(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? because it has 
    // name create in its method so the ownership comes to us so we
    // have to release it.

    return ExtractedImage;

}

FYI:

несмотря на то, что на него был дан четкий ответ, я думал, что предоставление его как простого многоразового фрагмента кода "Copy-Paste" будет большой помощью программистам, и я приписываю ответ Михаль