Рисовать на CGContext из CGImage

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