Нарисуйте выделенные области UIImage - PullRequest
7 голосов
/ 27 октября 2009

У меня есть UIImage, содержащее изображение с целой кучей меньших картинок на изображении (по существу, полоса изображения, содержащая спрайты). Я хотел бы нарисовать один спрайт на область моего UIView.

Я не могу найти способ нарисовать только часть UIImage на виде. Есть ли способ, который делает это?

Ответы [ 3 ]

8 голосов
/ 27 октября 2009

Я думаю, что вы можете искать CGImageCreateWithImageInRect () . Вы можете получить CGImage из UIImage с одноименным свойством .

РЕДАКТИРОВАТЬ: еще один вариант, который существует в 2014 году, а не в 2009 году, это SpriteKit . В зависимости от того, что вы делаете, вам нужен спрайт, это может быть полезно.

3 голосов
/ 25 ноября 2011

Я написал категорию UIImage для обработки спрайтов. Проверьте это, это может быть полезно http://reecon.wordpress.com/2011/11/19/uiimage-sprite-additions-objective-c/

Как отмечалось ранее, эта категория основана на CGImageCreateWithImageInRect(), но делает процесс извлечения спрайтов из одного листа спрайтов намного более удобным и быстрее .

Ссылка на страницу git hub: https://github.com/r3econ/UIImage-Sprite-Additions

Вы также можете установить с помощью какао.

2 голосов
/ 27 октября 2009

Да, вы уверены, что можете с кварцем.

Здесь есть учебник, в котором показано, как получить UIImage и замаскировать его часть.

http://iosdevelopertips.com/cocoa/how-to-mask-an-image.html

Вот код с этой страницы (если он почему-то не работает)

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

    CGImageRef maskRef = maskImage.CGImage; 

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
        CGImageGetHeight(maskRef),
        CGImageGetBitsPerComponent(maskRef),
        CGImageGetBitsPerPixel(maskRef),
        CGImageGetBytesPerRow(maskRef),
        CGImageGetDataProvider(maskRef), NULL, false);

    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
    return [UIImage imageWithCGImage:masked];

}
...