2012-10-16 32 views
9

Tôi đang cố làm mờ hình ảnh bằng CoreImage trên iOS 6 mà không có viền đen đáng chú ý. Apple documentation nói rằng sử dụng một bộ lọc CIAffineClamp có thể đạt được điều này nhưng tôi không thể có được một hình ảnh đầu ra từ bộ lọc. Đây là những gì tôi đã thử, nhưng tiếc là một hình ảnh trống được tạo ra khi tôi truy cập [clampFilter outputImage]. Nếu tôi chỉ thực hiện làm mờ một hình ảnh được tạo ra, nhưng với biên giới inset tối.CIGaussianBlur và CIAffineClamp trên iOS 6

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); 

Trả lời

14

Bộ lọc CIAffineClamp đặt mức độ của bạn là vô hạn, sau đó sẽ làm bối rối bối cảnh của bạn. Hãy thử tiết kiệm khỏi phạm vi trước khi kẹp CGRect, và sau đó cung cấp cho bộ khởi tạo ngữ cảnh.

+4

Ngữ cảnhRect là vấn đề. Tôi thực sự cố định nó bằng cách thay đổi dòng này để sử dụng mức inputImage khi tạo CGImage ở cuối: 'CGImageRef cgimg = [context createCGImage: outputImage fromRect: inputImage.extent];' – bryguy1300

Các vấn đề liên quan