次のコードを使用して、いくつかの種類の画像フィルターを適用します。(共通の completeImageUsingOutput メソッドを使用して、明るさ、彩度、コントラスト用にさらに 3 つの 'editImage' 関数があります)。スライダーを使用して値を変化させます。それらのいずれかを個別に使用すると、正常に機能します。2 つの異なるフィルターで 2 つの関数呼び出しを行うとすぐに、アプリがクラッシュしました。
編集: didReceiveMemoryWarning が呼び出されます。メモリ リーク インストゥルメントを使用してメモリ割り当てを確認し、各編集後にメモリ割り当てが約 15 MB 増加します。
CGImageRef cgimg = [context createCGImage:outputImage fromRect:outputImage.extent];の間にクラッシュが発生します。
さらに、completeImageUsingOutputImage メソッドの指示を個々の関数に入れると、クラッシュすることなく 2 種類のフィルターを操作できます。3 つ目を呼び出すとすぐに、アプリがクラッシュします。
(フィルターとコンテキストはインスタンス変数として宣言され、init メソッドで初期化されています)
- (UIImage *)editImage:(UIImage *)imageToBeEdited tintValue:(float)tint
{
CIImage *image = [[CIImage alloc] initWithImage:imageToBeEdited];
NSLog(@"in edit Image:\ncheck image: %@\ncheck value:%f", image, tint);
[tintFilter setValue:image forKey:kCIInputImageKey];
[tintFilter setValue:[NSNumber numberWithFloat:tint] forKey:@"inputAngle"];
CIImage *outputImage = [tintFilter outputImage];
NSLog(@"check output image: %@", outputImage);
return [self completeEditingUsingOutputImage:outputImage];
}
- (UIImage *)completeEditingUsingOutputImage:(CIImage *)outputImage
{
CGImageRef cgimg = [context createCGImage:outputImage fromRect:outputImage.extent];
NSLog(@"check cgimg: %@", cgimg);
UIImage *newImage = [UIImage imageWithCGImage:cgimg];
NSLog(@"check newImge: %@", newImage);
CGImageRelease(cgimg);
return newImage;
}
編集:縮小サイズの画像でこれらのフィルターを使用することは現在機能していますが、それでも、以前にメモリが解放されなかったのはなぜでしょうか。