Erklärung / Konvertierung von iOS zu Mac GraphicContext

Ich programmiere seit zwei Jahren auf iOS und nie auf Mac. Ich arbeite an einem kleinen Hilfsprogramm für die Verwaltung einiger einfacher Bildanforderungen, die ich in meiner iOS-Entwicklung habe. Wie auch immer, ich habe Arbeitscode in iOS, der perfekt läuft, aber ich habe absolut keine Ahnung, welche Entsprechungen für Mac sind.

Ich habe verschiedene Dinge ausprobiert, verstehe aber nicht, wie man einen Grafikkontext auf dem Mac außerhalb einer "drawRect:" - Methode startet. Auf dem iPhone würde ich nur UIGraphicsBeghinImageContext () verwenden. Ich weiß, dass andere Posts gesagt haben, dass sie lockFocus / unlockFocus verwenden sollen, aber ich bin mir nicht sicher, wie ich das genau an meine Bedürfnisse anpassen soll. Oh, und ich vermisse wirklich die "CGImage" -Eigenschaft von UIImage. Ich verstehe nicht, warum NSImage keine haben kann, obwohl es ein bisschen kniffliger klingt als nur das.

Hier ist mein Arbeitscode für iOS - im Grunde wird nur ein reflektiertes Bild aus einer Maske erstellt und zusammengefügt:

    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

Irgendwelche Vorschläge, um dies (einfach) auf dem Mac zu erreichen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage