私は iOS で 2 年間プログラミングしていますが、Mac ではプログラミングをしたことがありません。私は、iOS 開発で必要ないくつかの単純な画像を処理するための小さなユーティリティに取り組んでいます。とにかく、私は iOS で完全に動作する作業コードを持っていますが、Mac に相当するものはまったくわかりません。
さまざまなことを試しましたが、「drawRect:」メソッドの外で Mac でグラフィックス コンテキストを開始する方法が本当にわかりません。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 でこれを (単純に) 達成するための提案はありますか?