Find file History

id title brief article sdk dateupdated
Adjust Contrast and Brightness of an Image
This recipe shows how to use a CoreImage filter to adjust the contrast, saturation and brightness of an image.


The CoreImage framework provides a number of different filters that can be applied to images. This recipe shows how to implement the CIColorControls filter with Xamarin.iOS.

To implement the CIColorControls filter:

  • Make sure your code file references CoreImage and CoreGraphics namespaces:
using CoreImage;
using CoreGraphics;
  • Add an image view and load an image (ensure the image has been added to your project with Build Action: BundleResource):
imageView = new UIImageView(new CGRect(10, 190, 300, 200));
sourceImage = UIImage.FromFile ("clouds.jpg");
imageView.Image = sourceImage;
View.Add (imageView);
  • Add three sliders that will change the value of the brightness, saturation and contrast parameters:
sliderBrightness = new UISlider(new CGRect(100,  70, 210, 20));
sliderSaturation = new UISlider(new CGRect(100, 110, 210, 20));
sliderContrast = new UISlider(new CGRect(100, 150, 210, 20));
View.Add (sliderContrast);
View.Add (sliderSaturation);
View.Add (sliderBrightness);
  • Set the minimum and maximum values for the sliders based on the CIColorControls filter documentation :
sliderSaturation.MinValue = 0;
sliderSaturation.MaxValue = 2;
sliderBrightness.MinValue = -1;
sliderBrightness.MaxValue = 1;
sliderContrast.MinValue = 0;
sliderContrast.MaxValue = 4;
// set default values
sliderSaturation.Value = 1;
sliderBrightness.Value = 0;
sliderContrast.Value = 1;
  • Attach a handler to each slider so that the image can be updated when the sliders are changed:
sliderContrast.ValueChanged += HandleValueChanged;
sliderSaturation.ValueChanged += HandleValueChanged;
sliderBrightness.ValueChanged += HandleValueChanged;
  • Implement the HandleValueChanged method to adjust the colors of the image and assign the output to the UIImageView:
void HandleValueChanged (object sender, EventArgs e)
	// use the low-res version
	if (colorCtrls == null)
		colorCtrls = new CIColorControls () { Image = CIImage.FromCGImage (sourceImage.CGImage) };
		colorCtrls.Image = CIImage.FromCGImage(sourceImage.CGImage);
  // re-use context for efficiency
  if (context == null)
		context = CIContext.FromOptions (null);
  // set the values
	colorCtrls.Brightness = sliderBrightness.Value;
	colorCtrls.Saturation = sliderSaturation.Value;
	colorCtrls.Contrast = sliderContrast.Value;
  // do the transformation
	using (var outputImage = colorCtrls.OutputImage) {
		var result = context.CreateCGImage (outputImage, outputImage.Extent);
    // display the result in the UIImageView
		imageView.Image = UIImage.FromImage (result);

Additional Information

The transformed image can be saved to the photo album using this code:

var someImage = imageView.Image;
someImage.SaveToPhotosAlbum((image, error) => {
    // Called on completion...
    //new UIAlertView("Saved", "Photo saved to Camera Roll", null, "OK", null).Show ();
    Console.WriteLine("CIColorControls image saved to Photos");

The Adjust Image Pro recipe sample includes additional code to take an picture with the camera, resize it for manipulation then save the original size with the color changes applied.