Как разрезать большой спрайт png на меньшие UIImages? - PullRequest
9 голосов
/ 22 сентября 2010

Например, файл PNG имеет размер 1200 (ч) х 50 (ш) пикселей, как я могу вырезать PNG и загружать за 6 UIImage с, каждый 200 (ч) х 50 (ж).Спасибо!

РЕДАКТИРОВАТЬ - благодаря ответу Михала, окончательный код:

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

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

 CGImageRelease(partOfImageAsCG);

Ответы [ 2 ]

13 голосов
/ 22 сентября 2010

Посмотрите на функцию 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);
2 голосов
/ 10 декабря 2013

Метод многократного использования:

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

}

К вашему сведению:

Несмотря на то, что на этот вопрос был дан четкий ответ, я подумал, что его можно использовать как простойФрагмент кода «Copy-Paste» очень помог бы программистам, и я приписываю ответ michal

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...