Я звоню следующий код из DrawRectполучить UIImage (или CGImage) от DrawRect
- (void) drawPartial:(UIImage *)img colour:(UIColor *)colour {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, self.frame, img.CGImage);
if (colour!=nil) {
CGContextSetBlendMode (context, kCGBlendModeColor);
CGContextClipToMask(context, self.bounds, img.CGImage);
CGContextSetFillColor(context, CGColorGetComponents(colour.CGColor));
CGContextFillRect (context, self.bounds);
}
self.currentImage=UIGraphicsGetImageFromCurrentImageContext();
CGContextRestoreGState(context);
}
Infact Я называю это несколько раз, чтобы создать составное изображение динамически окрашенное. Каждый IMG Передаваемого эффективно прозрачная накладка с другой частью изображения на ней.
Я могу построить свое сложное изображение, вызвав это несколько раз в drawrect. Проблема возникает, когда я хочу обновить одну часть изображения. В идеале я мог бы вызвать вышеупомянутую функцию и просто изменить одну часть: я пробовал играть с self.clearsContextBeforeDrawing безрезультатно.
Тогда я думал, что я хотел бы попробовать, чтобы сохранить копию изображения с каждого розыгрыша, как кэшированных имидж государства - это способ, которым я просто нужно наложить новую часть на том, что: два вызова, а не 15.
Однако строка self.currentImage = UIGraphicsGetImageFromCurrentImageContext() не возвращает мне текущее изображение, поэтому я не могу создать кешированную копию.
Любая помощь по любому из подходов будет действительно оценена. (или, очевидно, укажите мне, как я должен это делать!)
EDIT Я также пробовал компоновку изображения отдельно, используя практически тот же код, а затем рисовал это, но опять же я не получаю изображение. .
- (UIImage *) overlayImage:(UIImage *)srcImage withImage:(UIImage *)overlayImage ofColour:(UIColor *)colour {
CGSize size =srcImage.size;
CGRect box = CGRectMake(0, 0, size.width, size.height);
UIGraphicsBeginImageContext(size);
CGContextRef context=UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0.0, size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, box, srcImage.CGImage);
if (colour!=nil) {
CGContextSetBlendMode (context, kCGBlendModeColor); //kCGBlendModeMultiply
CGContextClipToMask(context, box, overlayImage.CGImage); // respect alpha mask
CGContextSetFillColor(context, CGColorGetComponents(colour.CGColor));
CGContextFillRect (context, box);
}
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
//UIImage *result = [UIImage imageWithCGImage: CGBitmapContextCreateImage (context)];
UIGraphicsEndImageContext();
return result;
}
Вы не можете получить изображение из контекста рисования по умолчанию. Вы можете получить только один, если вы начинаете отдельный (внеэкранный) контекст явно с помощью UIGraphicsBeginImageContext. –