Я программировал в течение двух лет на iOS и никогда на Mac. Я работаю над небольшой утилитой для обработки некоторых простых потребностей в изображении, которые у меня есть в моей iOS-разработке. Во всяком случае, у меня есть рабочий код в iOS, который работает отлично, но я совершенно не знаю, какие эквиваленты для Mac.
Я пробовал кучу разных вещей, но я действительно не понимаю, как начать графический контекст на Mac вне метода "drawRect:". На iPhone я бы просто использовал UIGraphicsBeghinImageContext(). Я знаю, что другой пост сказал использовать lockFocus/unlockFocus, но я не уверен, как именно сделать эту работу для моих нужд. О, и я действительно скучаю по UIImage "CGImage". Я не понимаю, почему NSImage не может его иметь, хотя это звучит немного сложнее, чем просто.
Вот мой рабочий код на iOS - он просто создает отраженное изображение из маски и объединяет их:
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
Любые предложения по достижению этого (просто) на Mac?