2009-12-20 14 views
7

tengo que dibujar una serie de archivos PNG en un CGContext para que pueda mezclar juntos:Dibujar una imagen PNG en un contexto de gráficos para el modo de fusión Manipulación

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

Actualmente tengo mi aplicación de trabajo basado en solo dibujo cada imagen como un UIImageView y agregarlas como una subvista al archivo de vista a través de: [self addSubview:someImageView] ... pero esto no permite la manipulación del modo de fusión, ¿no?

Actualmente los VARs UIImageView están siendo asignados a través de:

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

Así que he intentado reemplazar aquellos con cualquiera de estos sin suerte:

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

y esto se necesita un CGImage cual No estoy seguro de cómo hacer con los PNG:

CGContextDrawImage(context, rect, someCGImage); 

Entonces, ¿qué? ¿Me estoy perdiendo? Estas no se desencadenan por ninguna interacción, solo necesitan cargar/dibujar cuando se carga la aplicación.

Gracias por cualquier pista. :)

Respuesta

19

No necesita utilizar UIImageViews. En su lugar, alinee su dibujo entre llamadas al UIGraphicsBeginImageContext y UIGraphicsEndImageContext.

Por ejemplo (código no probado):

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

Si desea utilizar CG llama, llame a:

CGContextRef context = UIGraphicsGetCurrentContext(); 

para conseguir que el árbitro contexto.

+1

Por cierto, es fácil hacer una CGImage desde un UIImage. Hay una propiedad CGImage en UIImage. Sin embargo, evite mezclar las rutinas de dibujo de UIImage y CGImage, de lo contrario, encontrará que el contexto del dibujo está al revés. –

+0

No estaba claro en esta última parte, ya que quiero rotar las uiimages antes de dibujarlas, pero llamando a CGContextRotateCTM (context, 3.14); antes de que el comando de dibujo en realidad no girara en los 180 grados deseados. Y sí, el primer comando que llamé en el método drawRect fue CGContextRef context = UIGraphicsGetCurrentContext(); ¿Pensamientos? – steganous

+0

Parece que lo estás haciendo bien. ¿Puedes publicar tu nuevo código? –

Cuestiones relacionadas