2011-12-15 33 views
5

Tôi đang cố xử lý hình ảnh bằng Hình ảnh lõi. Tôi đã tạo danh mục UIImage để làm điều đó.iOS - Không thể xử lý hình ảnh bằng CIFilter

Tôi đã thêm QuartzCoreCoreImage khuôn khổ dự án, nhập khẩu CoreImage/CoreImage.h và sử dụng mã này:

CIImage *inputImage = self.CIImage; 
CIFilter *exposureAdjustmentFilter = [CIFilter filterWithName:@"CIExposureAdjust"]; 
[exposureAdjustmentFilter setDefaults]; 
[exposureAdjustmentFilter setValue:inputImage forKey:@"inputImage"]; 
[exposureAdjustmentFilter setValue:[NSNumber numberWithFloat:5.0f] forKey:@"inputEV"]; 
CIImage *outputImage = [exposureAdjustmentFilter valueForKey:@"outputImage"]; 
CIContext *myContext = [CIContext contextWithOptions:nil]; 

return [UIImage imageWithCGImage:[myContext createCGImage:outputImage fromRect:outputImage.extent]]; 

Nhưng tôi đã có nil hình ảnh đầu ra từ bộ lọc .

Tôi cũng đã cố gắng sử dụng CIHueAdjust với cùng một kết quả.

Thần bạn trước

CẬP NHẬT: Tôi đã tìm thấy giải pháp. Nó là cần thiết để alloc mới CIImage, không chỉ vượt qua tham chiếu đến UIImage.CIImage theo cách này:

CIImage *inputImage = [[CIImage alloc] initWithImage:self]; 
+0

hi lọc màu sắc đang làm việc cho bạn .. các phím từ điển cần được thiết lập là gì ... –

Trả lời

5

Hãy thử đoạn mã sau: -

CIImage *inputImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"old-country-rain.jpg"]]; 
CIFilter * controlsFilter = [CIFilter filterWithName:@"CIExposureAdjust"]; 
[controlsFilter setValue:inputImage forKey:kCIInputImageKey]; 
[controlsFilter setValue:[NSNumber numberWithFloat: 2.0f] forKey:@"inputEV"]; 
NSLog(@"%@",controlsFilter.attributes); 
CIImage *displayImage = controlsFilter.outputImage; 
UIImage *finalImage = [UIImage imageWithCIImage:displayImage]; 

CIContext *context = [CIContext contextWithOptions:nil]; 
if (displayImage == nil || finalImage == nil) { 
    // We did not get output image. Let's display the original image itself. 
    imageView.image = [UIImage imageNamed:@"old-country-rain.jpg"]; 
}else { 
    // We got output image. Display it. 
    imageView.image = [UIImage imageWithCGImage:[context createCGImage:displayImage fromRect:displayImage.extent]]; 
} 
+3

Cảm ơn! Nó là cần thiết để phân bổ đầu vào mới ** CIImage ** theo cách này: 'CIImage * inputImage = [[CIImage alloc] initWithImage: self];' –

+0

Không, bạn không cần phải phân bổ CIImage. Sử dụng điều này: CIImage * inputImage = [CIImage imageWithCGImage: self.CGImage]; – Muzammil

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