私はCIImageから読み込まれたUIImageを持っています:
tempImage = [UIImage imageWithCIImage:ciImage];
問題は、tempImage
を特定のCGRect
にトリミングする必要があることです。これを行う方法を知る唯一の方法は、CGImage
を使用することです。問題は、iOS 6.0のドキュメントでこれを見つけたことです。
CGImageIf the UIImage object was initialized using a CIImage object, the value of the property is NULL.
A. CIImageからCGImageに変換する方法は?私はこのコードを使用していますが、メモリリークがあります(どこにあるか理解できません)。
+(UIImage*)UIImageFromCIImage:(CIImage*)ciImage {
CGSize size = ciImage.extent.size;
UIGraphicsBeginImageContext(size);
CGRect rect;
rect.Origin = CGPointZero;
rect.size = size;
UIImage *remImage = [UIImage imageWithCIImage:ciImage];
[remImage drawInRect:rect];
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
remImage = nil;
ciImage = nil;
//
return result;
}
createCGImage:fromRect: については、CIContext
のドキュメントを参照してください
CGImageRef img = [myContext createCGImage:ciImage fromRect:[ciImage extent]];
同様の質問への回答から: https://stackoverflow.com/a/10472842/474896
また、最初にCIImage
があるため、CIFilter
を使用して実際に画像をトリミングできます。
Swift、Swift 4およびSwift 5
SwiftでCIImage
をCGImage
に変換するための素敵な小さな関数を次に示します。
func convertCIImageToCGImage(inputImage: CIImage) -> CGImage? {
let context = CIContext(options: nil)
if let cgImage = context.createCGImage(inputImage, from: inputImage.extent) {
return cgImage
}
return nil
}