2012-10-16 5 views
9

검은 색 경계가 눈에 띄지 않고 iOS 6에서 CoreImage를 사용하여 이미지를 흐리게 처리하려고합니다. Apple documentation은 CIAffineClamp 필터를 사용하면이 문제를 해결할 수 있다고 말합니다. 그러나 필터에서 출력 이미지를 가져올 수 없습니다. 여기에 내가 시도했지만, 불행히도 [clampFilter outputImage]에 액세스 할 때 빈 이미지가 생성됩니다. 흐리게 처리 만 수행하면 이미지가 생성되지만 어두운 인세 트 경계가 생성됩니다.iOS 6의 CIGaussianBlur 및 CIAffineClamp

CIImage *inputImage = [[CIImage alloc] initWithCGImage:self.CGImage]; 

CIContext *context = [CIContext contextWithOptions:nil]; 

CGAffineTransform transform = CGAffineTransformIdentity; 

CIFilter *clampFilter = [CIFilter filterWithName:@"CIAffineClamp"]; 
[clampFilter setValue:inputImage forKey:kCIInputImageKey]; 
[clampFilter setValue:[NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)] forKey:@"inputTransform"]; 

CIImage *outputImage = [clampFilter outputImage]; 

CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur" 
    keysAndValues:kCIInputImageKey, outputImage, @"inputRadius", [NSNumber numberWithFloat:radius], nil]; 

outputImage = [blurFilter outputImage]; 

CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; 
UIImage *blurredImage = [UIImage imageWithCGImage:cgimg]; 
CGImageRelease(cgimg); 

답변

14

CIAffineClamp 필터는 범위를 무제한으로 설정하여 컨텍스트를 혼동시킵니다. 프리 - 클램프 범위 (pre-clamp extent) 인 CGRect를 저장 한 다음 문맥 초기화 프로그램에 제공하십시오.

+4

contextRect가 문제였습니다. 사실 CGImage를 마지막에 만들 때 inputImage extent를 사용하도록이 줄을 변경하여 수정했습니다. CGImageRef cgimg = [context createCGImage : outputImage fromRect : inputImage.extent]; – bryguy1300

관련 문제