我在iOS上編程了兩年,從未在Mac上編程過。我正在處理一些用於處理iOS開發中的一些簡單圖像需求的實用程序。無論如何,我有工作代碼在iOS中運行完美,但我絕對不知道什麼是等效的Mac。iOS to Mac GraphicContext說明/轉換
我試過了一堆不同的東西,但我真的不明白如何在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平臺上實現這種(簡單)?
簡單Swift3版本:'(CGContextRef)[[獲取到NSGraphicsContext currentContext] graphicsPort]' – CodaFi
這是否啓動圖形上下文?如果是這樣,那我該如何繪製圖像並檢索它們(如UIGraphicsGetImageFromCurrentImageContext())。另外,我將如何去NSImage和CGImage之間? – daveMac
增加了一個Swift版本:http://stackoverflow.com/a/34361216/1226095 –