iOS в Mac GraphicContext Объяснение / Преобразование

Я два года программировал на iOS, а не на Mac. Я работаю над небольшой утилитой для обработки некоторых простых потребностей с изображениями, которые есть в моей разработке для iOS. Во всяком случае, у меня есть рабочий код в iOS, который отлично работает, но я абсолютно не представляю, что такое эквиваленты для Mac.

Я пробовал кучу разных вещей, но я действительно не понимаю, как запустить графический контекст на Mac за пределами & lt; drawRect: & quot; метод. На 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?

Ответы на вопрос(4)

Ваш ответ на вопрос