Skip to content

Instantly share code, notes, and snippets.

@zef
Created April 16, 2014 16:37
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 zef/10904278 to your computer and use it in GitHub Desktop.
Save zef/10904278 to your computer and use it in GitHub Desktop.
Was messing with replacing color in an image with another color. Didn't work that well, mostly saturation and brightness problems
- (UIImage *)imageByShiftingFromColor:(UIColor *)startColor toColor:(UIColor *)endColor
{
CGFloat startHue, startSaturation, startBrightness, startAlpha;
BOOL parsedStartColor = [startColor getHue:&startHue saturation:&startSaturation brightness:&startBrightness alpha:&startAlpha];
NSLog(@"start success: %i hue: %0.2f, saturation: %0.2f, brightness: %0.2f, alpha: %0.2f", parsedStartColor, startHue, startSaturation, startBrightness, startAlpha);
CGFloat endHue, endSaturation, endBrightness, endAlpha;
BOOL parsedEndColor = [endColor getHue:&endHue saturation:&endSaturation brightness:&endBrightness alpha:&endAlpha];
NSLog(@"end success: %i hue: %0.2f, saturation: %0.2f, brightness: %0.2f, alpha: %0.2f", parsedEndColor, endHue, endSaturation, endBrightness, endAlpha);
CIImage *ciImage = [CIImage imageWithCGImage:[self CGImage]];
CGFloat radianShift = (endHue - startHue) * M_PI * 2;
NSLog(@"hue shift: %f, radians: %f", endHue - startHue, radianShift);
CIFilter *adjustHue = [CIFilter filterWithName:@"CIHueAdjust"];
[adjustHue setDefaults];
[adjustHue setValue:ciImage forKey:@"inputImage"];
[adjustHue setValue:[NSNumber numberWithFloat:radianShift] forKey:@"inputAngle"];
ciImage = [adjustHue outputImage];
CGFloat saturationShift = 1 + endSaturation - startSaturation;
CGFloat brightnessShift = endBrightness - startBrightness;
NSLog(@"saturation shift: %f", saturationShift);
NSLog(@"brightness shift: %f", brightnessShift);
// saturationShift = 1.2;
// brightnessShift = -0.1;
CIFilter *adjustBrightness = [CIFilter filterWithName:@"CIColorControls"];
[adjustBrightness setDefaults];
[adjustBrightness setValue:ciImage forKey:@"inputImage"];
[adjustBrightness setValue:[NSNumber numberWithFloat:saturationShift] forKey:@"inputSaturation"];
[adjustBrightness setValue:[NSNumber numberWithFloat:brightnessShift] forKey:@"inputBrightness"];
ciImage = [adjustBrightness outputImage];
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef imageRef = [context createCGImage:ciImage fromRect:[ciImage extent]];
UIImage *image = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return image;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment