Skip to content

Instantly share code, notes, and snippets.

@panupan
Created August 24, 2012 16:38
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save panupan/3452681 to your computer and use it in GitHub Desktop.
Save panupan/3452681 to your computer and use it in GitHub Desktop.
NSImage Grayscale transform with Core Animation CIFilter
//
// NSImage+Grayscale.h
//
// Created by Panupan Sriautharawong on 8/7/12.
//
//
#import <Cocoa/Cocoa.h>
@interface NSImage (Grayscale)
- (NSImage *)grayscaleImageWithAlphaValue:(CGFloat)alphaValue
saturationValue:(CGFloat)saturationValue
brightnessValue:(CGFloat)brightnessValue
contrastValue:(CGFloat)contrastValue;
@end
//
// NSImage+Grayscale.m
//
// Created by Panupan Sriautharawong on 8/7/12.
//
//
#import "NSImage+Grayscale.h"
#import <QuartzCore/QuartzCore.h>
@implementation NSImage (Grayscale)
- (NSImage *)grayscaleImageWithAlphaValue:(CGFloat)alphaValue
saturationValue:(CGFloat)saturationValue
brightnessValue:(CGFloat)brightnessValue
contrastValue:(CGFloat)contrastValue
{
NSSize size = [self size];
NSRect bounds = { NSZeroPoint, size };
NSImage *tintedImage = [[NSImage alloc] initWithSize:size];
[tintedImage lockFocus];
CIFilter *monochromeFilter = [CIFilter filterWithName:@"CIColorMonochrome"];
[monochromeFilter setDefaults];
[monochromeFilter setValue:[CIImage imageWithData:[self TIFFRepresentation]] forKey:@"inputImage"];
[monochromeFilter setValue:[CIColor colorWithRed:0 green:0 blue:0 alpha:1] forKey:@"inputColor"];
[monochromeFilter setValue:[NSNumber numberWithFloat:1] forKey:@"inputIntensity"];
CIFilter *colorFilter = [CIFilter filterWithName:@"CIColorControls"];
[colorFilter setDefaults];
[colorFilter setValue:[monochromeFilter valueForKey:@"outputImage"] forKey:@"inputImage"];
[colorFilter setValue:[NSNumber numberWithFloat:saturationValue] forKey:@"inputSaturation"];
[colorFilter setValue:[NSNumber numberWithFloat:brightnessValue] forKey:@"inputBrightness"];
[colorFilter setValue:[NSNumber numberWithFloat:contrastValue] forKey:@"inputContrast"];
[[colorFilter valueForKey:@"outputImage"] drawAtPoint:NSZeroPoint
fromRect:bounds
operation:NSCompositeCopy
fraction:alphaValue];
[tintedImage unlockFocus];
return tintedImage;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment