나는 채도 구현의 코드를 보았다. 나는 그것을 매우 훌륭하게 발견했다. 그러나 나는 또한 이와같이 색조를 구현하고 싶다.픽셀 버퍼를 사용하여 색조를 UIImage에 적용하는 방법은 무엇입니까?
-(UIImage*)doHueAdjustFilterWithBaseImageName:(NSString*)baseImageName hueAdjust:(CGFloat)hueAdjust
{
CIImage *inputImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:baseImageName]];
CIFilter * controlsFilter = [CIFilter filterWithName:@"CIHueAdjust"];
[controlsFilter setValue:inputImage forKey:kCIInputImageKey];
[controlsFilter setValue:[NSNumber numberWithFloat:hueAdjust] forKey:@"inputAngle"];
NSLog(@"%@",controlsFilter.attributes);
CIImage *displayImage = controlsFilter.outputImage;
UIImage *finalImage = [UIImage imageWithCIImage:displayImage];
CIContext *context = [CIContext contextWithOptions:nil];
if (displayImage == nil || finalImage == nil) {
// We did not get output image. Let's display the original image itself.
return [UIImage imageNamed:baseImageName];
}else {
// We got output image. Display it.
return [UIImage imageWithCGImage:[context createCGImage:displayImage fromRect:displayImage.extent]];
}
}
매우 깔끔한, 무슨 일이 일어나고 있는지보고 매우 쉽게 일을 가져옵니다 - 채도의
코드
void filterSaturate(UInt8 *pixelBuf, UInt32 offset, void *context)
{
double t = *((double*)context);
int r = offset;
int g = offset+1;
int b = offset+2;
int red = pixelBuf[r];
int green = pixelBuf[g];
int blue = pixelBuf[b];
int avg = (red + green + blue)/3;
pixelBuf[r] = SAFECOLOR((avg + t * (red - avg)));
pixelBuf[g] = SAFECOLOR((avg + t * (green - avg)));
pixelBuf[b] = SAFECOLOR((avg + t * (blue - avg)));
}
처음으로 색상을 선택하지 않고 색조 이동을 적용하는 것이 타당하지 않을 수 있습니다. 그러나, 당신이해야 할 일은 HSB (HSV)로 픽셀 색상을 변환하고 H를 변경하는 것입니다. –