2012-03-22 12 views
10

En Mac OSX (cacao), Es muy fácil hacer una imagen en blanco de un tamaño específico y dibujar a ella fuera de la pantalla:UIImage vs NSImage: Dibujo de una imagen fuera de la pantalla en iOS

NSImage* image = [[NSImage alloc] initWithSize:NSMakeSize(64,64)]; 
[image lockFocus]; 
/* drawing code here */ 
[image unlockFocus]; 

Sin embargo , en iOS (toque de cocoa) no parece haber llamadas equivalentes para UIImage. Quiero usar UIImage (o alguna otra clase equivalente) para hacer lo mismo. Es decir, quiero hacer una imagen de tamaño explícito, inicialmente vacía, a la que pueda dibujar usando llamadas como UIRectFill(...) y [UIBezierPath stroke].

¿Cómo podría hacer esto?

Respuesta

8

CoreGraphics aquí, como UIImage no tiene funciones de alto nivel como lo que usted explicó ..

UIGraphicsBeginImageContext(CGSizeMake(64,64)); 

CGContextRef context = UIGraphicsGetCurrentContext(); 
// drawing code here (using context) 

UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
3

se puede hacer eso de la siguiente manera:

UIGraphicsBeginImageContext(CGSizeMake(64, 64)); 
//Drawing code here 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

Aquí es referencia de Apple Graphics and Drawing. se necesita

+1

pero no se olvide de poner fin a la imagen del contexto ! –

+0

Sí, me olvidé de copiar eso. – sch

+0

Ok, supongo que esto es equivalente a crear el 'NSImage' y llamar a' lockFocus', pero ¿cómo desbloquearía el foco? – mtmurdock

0

Algo como esto:

UIGraphicsBeginImageContextWithOptions(mySize, NO, 0.0f);  
CGContextRef context = UIGraphicsGetCurrentContext(); 
UIGraphicsPushContext(context); 

[myImage drawInRect:myImageRect]; 
[myText drawAtPoint:myOrigin withFont:myFont]; 

UIGraphicsPopContext(); 
UIImage *myNewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+0

Observe que querrá usar UIGraphicsBeginImageContextWithOptions en lugar de UIGraphicsBeginImageContext, para que dibuje en la escala compatible con el dispositivo. Usar UIGraphicsBeginImageContext se verá pobre en una pantalla Retina. –

+2

'UIGraphicsPushContext (context);' y 'UIGraphicsPopContext();' pueden eliminarse porque 'UIGraphicsBeginImageContextWithOptions (mySize, NO, 0.0f);' y 'UIGraphicsEndImageContext();' ya hacen eso. – sch

+0

Sí, me preguntaba sobre eso. Gracias. –

Cuestiones relacionadas