Tôi có một dự án với một số bộ lọc ảnh lõi, mỗi bộ lọc được kết nối với một thanh trượt khác. Tất cả mọi thứ hoạt động nhưng tôi chỉ không tìm ra cách tốt nhất để chuyển kết quả từ một bộ lọc sang bộ lọc tiếp theo. Mỗi thiết lập lại mỗi lần tôi thay đổi bất kỳ thanh trượt nào khác. Lý do là vì hình ảnh gốc, được tạo ra từ một hình ảnh được nhập sẽ được vẽ bởi từng bộ lọc làm hình ảnh đầu vào. Nhưng không chắc chắn làm thế nào để sửa lỗi này.cách tạo ảnh với nhiều bộ lọc ảnh lõi (không cần đặt lại kết quả)
Tôi đang cố gắng nghĩ cách tốt nhất để chuyển kết quả của nhiều bộ lọc vào một hình ảnh đầu ra.
đây là dự án: owolf.net/uploads/StackOverflow/CoreImageFilter.zip
và một số mã của viewControler dán dưới đây:
- (void)viewDidLoad
{
//Create CIImage
UIImage *aUIImage = [imageView image];
CGImageRef aCGImage = aUIImage.CGImage;
aCIImage = [CIImage imageWithCGImage:aCGImage];
//Create context
context = [CIContext contextWithOptions:nil];
saturationFilter = [CIFilter filterWithName:@"CIColorControls" keysAndValues: @"inputImage", aCIImage, nil];
brightnessFilter = [CIFilter filterWithName:@"CIColorControls" keysAndValues: @"inputImage", aCIImage, nil];
contrastFilter = [CIFilter filterWithName:@"CIColorControls" keysAndValues: @"inputImage", aCIImage, nil];
[super viewDidLoad];
}
- (IBAction)saturationSliderValueChanged:(id)sender {
outputImage = [saturationFilter outputImage];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
newUIImage = [UIImage imageWithCGImage:cgimg];
CGImageRelease(cgimg);
[imageView setImage:newUIImage];
}
- (IBAction)brightnessSliderValueChanged:(id)sender {
[brightnessFilter setValue:[NSNumber numberWithFloat:brigtnessSlider.value] forKey: @"inputBrightness"];
outputImage = [brightnessFilter outputImage];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
newUIImage = [UIImage imageWithCGImage:cgimg];
CGImageRelease(cgimg);
[imageView setImage:newUIImage];
}
- (IBAction)contrastSliderValueChanged:(id)sender {
[contrastFilter setValue:[NSNumber numberWithFloat:contrastSlider.value] forKey: @"inputContrast"];
outputImage = [contrastFilter outputImage];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
newUIImage = [UIImage imageWithCGImage:cgimg];
CGImageRelease(cgimg);
[imageView setImage:newUIImage];
}
Cảm ơn! Điều đó rất hữu ích. – Mrwolfy