Рисование изображения PNG в графическом контексте для манипулирования режимом наложения - PullRequest
7 голосов
/ 20 декабря 2009

Мне нужно нарисовать серию PNG в CGContext, чтобы я мог смешать их вместе:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(context, kCGBlendModeOverlay);

В настоящее время мое приложение работает на основе простого рисования каждого изображения в виде UIImageView и добавления их в качестве подпредставления к файлу вида с помощью: [self addSubview:someImageView] ... но это не позволяет манипулировать режимом наложения, верно?

В настоящее время переменные UIImageView назначаются через:

someImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image-name.png"]];

Итак, я попытался заменить их одним из них, но не повезло:

[[UIImage imageNamed:@"image-name.png"] drawInRect:rect blendMode:kCGBlendModeOverlay alpha:1.0];

и для этого нужен CGImage, который я не уверен, как сделать с PNG:

CGContextDrawImage(context, rect, someCGImage);

Так чего мне не хватает? Они не запускаются никаким взаимодействием, они просто должны загружаться / отрисовываться при загрузке приложения.

Спасибо за любые предложения. :)

1 Ответ

20 голосов
/ 21 декабря 2009

Вам не нужно использовать UIImageViews. Вместо этого заключите в скобки ваш рисунок между вызовами на UIGraphicsBeginImageContext и UIGraphicsEndImageContext.

Например (код не пробовал):

UIImage* uiimage = [UIImage imageNamed:@"image-name.png"];
UIImage* uiimage2 = [UIImage imageNamed:@"other-image-name.png"];

CGSize size = uiimage.size; 

UIGraphicsBeginImageContext(size);

[uiimage drawAtPoint:CGPointZero blendMode:kCGBlendModeOverlay alpha:1.0];
[uiimage2 drawAtPoint:CGPointZero blendMode:kCGBlendModeOverlay alpha:1.0];

UIImage* blendedImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

Если вы хотите использовать CG звонки, звоните:

CGContextRef context = UIGraphicsGetCurrentContext();

чтобы получить контекстную ссылку.

...