web-dev-qa-db-ja.com

CIImageからCGImageを取得する

私はCIImageから読み込まれたUIImageを持っています:

tempImage = [UIImage imageWithCIImage:ciImage];

問題は、tempImageを特定のCGRectにトリミングする必要があることです。これを行う方法を知る唯一の方法は、CGImageを使用することです。問題は、iOS 6.0のドキュメントでこれを見つけたことです。

CGImage
If 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;  
}
19
tagyro

createCGImage:fromRect: については、CIContextのドキュメントを参照してください

CGImageRef img = [myContext createCGImage:ciImage fromRect:[ciImage extent]];

同様の質問への回答から: https://stackoverflow.com/a/10472842/474896

また、最初にCIImageがあるため、CIFilterを使用して実際に画像をトリミングできます。

22
Joris Kluivers

SwiftSwift 4およびSwift 5

SwiftでCIImageCGImageに変換するための素敵な小さな関数を次に示します。

func convertCIImageToCGImage(inputImage: CIImage) -> CGImage? {
    let context = CIContext(options: nil)
    if let cgImage = context.createCGImage(inputImage, from: inputImage.extent) {
        return cgImage
    }
    return nil
}
16
skymook