He estado programando durante dos años en iOS y nunca en Mac. Estoy trabajando en una pequeña utilidad para manejar algunas necesidades de imagen simples que tengo en mi desarrollo de iOS. De todos modos, tengo un código de trabajo en iOS que funciona perfectamente pero no tengo ni idea de qué equivalentes son para mac.iOS a Mac GraphicContext Explicación/Conversión
He intentado un montón de cosas diferentes, pero realmente no entiendo cómo iniciar un contexto de gráficos en la Mac fuera de un método "drawRect:". En el iPhone, simplemente usaría UIGraphicsBeghinImageContext(). Sé que otras publicaciones me han dicho que utilicen lockFocus/unlockFocus, pero no estoy seguro de cómo hacerlo exactamente para mis necesidades. Ah, y realmente echo de menos la propiedad "CGImage" de UIImage. No entiendo por qué NSImage no puede tener uno, aunque suena un poco más complicado que eso.
Aquí está mi código de trabajo en IOS-básicamente sólo crea una imagen reflejada de una máscara y los combina juntos:
UIImage *mask = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"Mask_Image.jpg" ofType:nil]];
UIImage *image = [UIImage imageNamed::@"Test_Image1.jpg"];
UIGraphicsBeginImageContextWithOptions(mask.size, NO, [[UIScreen mainScreen]scale]);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(ctx, 0.0, mask.size.height);
CGContextScaleCTM(ctx, 1.f, -1.f);
[image drawInRect:CGRectMake(0.f, -mask.size.height, image.size.width, image.size.height)];
UIImage *flippedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGImageRef maskRef = mask.CGImage;
CGImageRef maskCreate = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask([flippedImage CGImage], maskCreate);
CGImageRelease(maskCreate);
UIImage *maskedImage = [UIImage imageWithCGImage:masked];
CGImageRelease(masked);
UIGraphicsBeginImageContextWithOptions(CGSizeMake(image.size.width, image.size.height + (image.size.height * .5)), NO, [[UIScreen mainScreen]scale]);
[image drawInRect:CGRectMake(0,0, image.size.width, image.size.height)];
[maskedImage drawInRect:CGRectMake(0, image.size.height, maskedImage.size.width, maskedImage.size.height)];
UIImage *anotherImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//do something with anotherImage
Cualquier sugerencia para lograr esto (sólo) en el Mac?
simple: '(CGContextRef) [[NSGraphicsContext CurrentContext] graphicsPort]' – CodaFi
¿Eso se inicia un contexto gráfico? Si es así, ¿cómo puedo dibujar las imágenes y recuperarlas (como UIGraphicsGetImageFromCurrentImageContext()). Además, ¿cómo voy a ir entre un NSImage y CGImage? – daveMac
Se agregó una versión de Swift: http://stackoverflow.com/a/34361216/1226095 –