2015-08-24 24 views
5

Tôi đang xây dựng một ứng dụng iOS dựa trên các hoạt động hình ảnh.Tăng/giảm độ sáng của hình ảnh bằng UISlider?

Tôi muốn tăng và giảm độ sáng của hình ảnh theo giá trị thanh trượt.

Tôi đã sử dụng mã này để làm điều này:

@IBOutlet var imageView: UIImageView! 
@IBOutlet var uiSlider : UISlider! 
override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     var image = UIImage(named: "54715869.jpg") 
     imageView.image = image 
     uiSlider.minimumValue = -0.2 
     uiSlider.maximumValue = 0.2 
     uiSlider.value = 0.0 
     uiSlider.maximumTrackTintColor = UIColor(red: 0.1, green: 0.7, blue: 0, alpha: 1) 
     uiSlider.minimumTrackTintColor = UIColor.blackColor() 
     uiSlider.addTarget(self, action: "brightnesssliderMove:", forControlEvents: UIControlEvents.TouchUpInside) 
     uiSlider.addTarget(self, action: "brightnesssliderMove:", forControlEvents: UIControlEvents.TouchUpOutside) 
    } 
    func brightnesssliderMove(sender: UISlider) 
    { 
     var filter = CIFilter(name: "CIColorControls"); 
     filter.setValue(NSNumber(float: sender.value), forKey: "inputBrightness") 
     var image = self.imageView.image 
     var rawimgData = CIImage(image: image) 
     filter.setValue(rawimgData, forKey: "inputImage") 
     var outpuImage = filter.valueForKey("outputImage") 
     imageView.image = UIImage(CIImage: outpuImage as CIImage) 

    } 

Bây giờ câu hỏi của tôi là khi tôi tăng giá trị thanh trượt nó cũng làm tăng độ sáng của hình ảnh nhưng chỉ khi tôi thay đổi vị trí thanh trượt cho lần đầu tiên.

Khi tôi đang một lần nữa thay đổi vị trí của thanh trượt Tôi nhận errror này:

fatal error: unexpectedly found nil while unwrapping an Optional value.

Lỗi này đang đến tại dòng:

imageView.image = UIImage(CIImage: outpuImage as CIImage) 

Lần này rawimgData dữ liệu đến nil.

+0

tại sao bạn thiết lập ' "inputImage"' hai lần? Và hơn thế nữa: bạn có chắc bạn đang cố gắng làm gì không? Theo tài liệu 'kCIInputBrightnessKey' không khả dụng trong iOS ... không chắc chắn thông tin đó có đúng không. – luk2302

+0

tôi đã chỉnh sửa câu hỏi của mình. kCIInputBrightnessKey đang làm việc với nó –

+0

Hãy xem câu trả lời này http://stackoverflow.com/a/15758267/2442804 để có được một ý tưởng tốt hơn về cách thức này có thể làm việc và những sai lầm của bạn ở đâu. – luk2302

Trả lời

17

Tôi tìm thấy câu trả lời cho câu hỏi của mình ở đây là cách tôi đã thực hiện mã hóa.

import CoreImage 
class ViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate 
{ 
    var aCIImage = CIImage(); 
    var contrastFilter: CIFilter!; 
    var brightnessFilter: CIFilter!; 
    var context = CIContext(); 
    var outputImage = CIImage(); 
    var newUIImage = UIImage(); 

override func viewDidLoad() 
    { 
    super.viewDidLoad() 
    var aUIImage = imageView.image; 
    var aCGImage = aUIImage?.CGImage; 
    aCIImage = CIImage(CGImage: aCGImage) 
    context = CIContext(options: nil); 
    contrastFilter = CIFilter(name: "CIColorControls"); 
    contrastFilter.setValue(aCIImage, forKey: "inputImage") 
    brightnessFilter = CIFilter(name: "CIColorControls"); 
    brightnessFilter.setValue(aCIImage, forKey: "inputImage") 
    } 
func sliderContrastValueChanged(sender: UISlider) 
    { 
    contrastFilter.setValue(NSNumber(float: sender.value), forKey: "inputContrast") 
    outputImage = contrastFilter.outputImage; 
    var cgimg = context.createCGImage(outputImage, fromRect: outputImage.extent()) 
    newUIImage = UIImage(CGImage: cgimg)! 
    imageView.image = newUIImage; 
    } 
func sliderValueChanged(sender: UISlider) 
    { 
    brightnessFilter.setValue(NSNumber(float: sender.value), forKey: "inputBrightness"); 
    outputImage = brightnessFilter.outputImage; 
    let imageRef = context.createCGImage(outputImage, fromRect: outputImage.extent()) 
    newUIImage = UIImage(CGImage: imageRef)! 
    imageView.image = newUIImage; 
    } 
} 
+0

Chủ đề và câu trả lời này thật tuyệt vời. Tôi không biết tại sao mọi người lại downvoted nó. :(cảm ơn! –

1

Bạn có thể sử dụng AlamofireImage, đây là một ví dụ về cách bạn có thể làm điều đó:

@IBAction func brightnessChanged(sender: UISlider) { 
     let filterParameters = ["inputBrightness": sender.value] 
     imageView.image = originalImage.af_imageWithAppliedCoreImageFilter("CIColorControls", filterParameters: filterParameters) 
    } 
Các vấn đề liên quan