#ios #cocoa-touch #image #quartz-graphics
#iOS #cocoa-touch #изображение #quartz-графика
Вопрос:
Я хотел бы рисовать на a CGContext
, используя плитки, из CGImage
которых я хотел бы рисовать в указанном порядке.
Согласно документации здесь кажется, что единственным способом рисования изображения в графическом контексте является
void CGContextDrawImage (
CGContextRef c,
CGRect rect,
CGImageRef image
);
Но это не учитывает случай, в котором я хочу нарисовать только CGRect
исходное изображение. Нужно ли мне делать какие-то трюки, чтобы это работало?
Ответ №1:
Если я правильно понял ваш вопрос, то вы просите обрезать изображение в определенном CGRect
месте, если да, то вам нужно взглянуть на этот метод.
CGImageCreateWithImageInRect(CGImage image, CGRect rect)
Это вернет вам a CGImageRef
и в соответствии с вашими потребностями, я думаю, это то, что вы ищете.
Комментарии:
1. Обратите внимание, что в результате сохраняется исходное изображение, и, хотя это быстрее, чем рисование изображения в контексте, оно может потреблять больше памяти.
Ответ №2:
Это листинг 11-1 из руководства Apple по программированию Quartz 2D:
myImageArea = CGRectMake (rooster_head_x_origin, rooster_head_y_origin,
myWidth, myHeight);
mySubimage = CGImageCreateWithImageInRect (myRoosterImage, myImageArea);
myRect = CGRectMake(0, 0, myWidth*2, myHeight*2);
CGContextDrawImage(context, myRect, mySubimage);
Обратите внимание, что CGImageCreateWithImageInRect
возвращает ссылку, за освобождение которой вы несете ответственность, поэтому вам нужно будет сделать это, когда вы закончите с mySubimage
:
CGImageRelease(mySubimage);