グレースケール UIImage マスクを UIImage に適用する (標準) コードを大量に借用しました。
- (void) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef imageRef = image.CGImage; // main UIImage
CGImageRef maskRef = maskImage.CGImage; // grayscale UIImage mask
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask(imageRef, mask);
maskedImage = [UIImage imageWithCGImage:masked];
CGImageRelease(mask);
CGImageRelease(masked);
imageView.image = maskedImage;
}
次に、imageView.image をファイルに保存します。このコードは、iOS 6 および 6.1 ではうまく機能します。保存された画像には、マスクが適用されたメインの UIImage が含まれています。ただし、このコードは iOS 7 (iPhone) では同じようには機能しないことに気付きました。iOS 7 では、保存されたイメージには、マスクが適用されていないメインの UIImage のみが含まれます。問題が CGImageCreateWithMask() メソッドにあるのか、他の場所にあるのかはわかりません。
任意の洞察をいただければ幸いです。よろしくお願いします。