2012-11-29 4 views
1

UIImage에 선명 효과 필터를 적용 할 때 약간 문제가 있습니다.CIFilter를 사용할 때 알파 채널 가져 오기 [지우는 방법]

코드는 완벽하게 작동하지만 결과 UIImage에 알파 채널이 있다는 문제가 있습니다. 이로 인해 성능 문제가 발생합니다.

이 내 컨텍스트를 초기화하고

EAGLContext *myEAGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 
NSMutableDictionary *options = [[NSMutableDictionary alloc] init]; 
[options setObject: [NSNull null] forKey: kCIContextWorkingColorSpace]; 
context = [CIContext contextWithEAGLContext:myEAGLContext options:options]; 
sharpenLuminanceFilter = [CIFilter filterWithName:@"CISharpenLuminance"]; 

를 필터링하는 방법입니다 그리고 이미지

- (UIImage *)applySharpingFilter:(UIImage *)originalImage withValue:(float)value{ 

CIImage *image = [CIImage imageWithCGImage:originalImage.CGImage]; 
[sharpenLuminanceFilter setValue:image forKey:@"inputImage"]; 
[sharpenLuminanceFilter setValue:[NSNumber numberWithFloat:value] forKey:@"inputSharpness"]; 
CIImage * result = sharpenLuminanceFilter.outputImage; 
CGImageRef cgimg = [context createCGImage:result fromRect:[result extent]]; 
double scaleFactor = [UIScreen mainScreen].scale; 
UIImage *finalImage = [UIImage imageWithCGImage:cgimg scale:scaleFactor orientation:UIImageOrientationUp]; 
CGImageRelease(cgimg); 
[sharpenLuminanceFilter setValue:nil forKey:@"inputImage"]; 
return finalImage; 

}

가 어쨌든 내가 그 I를 지정할 수 있습니다인가를 생성하기 위해 다음과 같은 기능을 사용하여 결과 이미지가 OPAQUE이고 알파 채널이 없기를 원하십니까?

답변

1

CIColorMatrix 필터를 사용할 수 있습니다. 행렬을 identity로 설정하고 바이어스를 [0, 0, 0, 1]로 설정하면 알파에 1이 추가되어 솔리드가됩니다.

알파 채널이 어떤 방식으로 실적에 영향을 주는지 궁금합니다.

+0

방금 ​​전체 그림을 더 흰색으로 만들었고 알파 채널을 제거하지 않았습니다. 이 문제는 투명도가있는 이미지가있는 경우 스크롤 속도가 느릴 때의 성능에 영향을 미칩니다. – Hosam

+0

채널이 RGBA 이외의 다른 것입니까? 그렇다면 1이 알파 채널과 동일한 위치에 있도록 바이어스 벡터를 변경해야 할 수도 있습니다. – user1118321

+0

결과 이미지에 항상 알파 채널이있는 모든 조합을 시도했습니다. CGImage를 만들 때 알파 채널을 제거하는 방법이 있습니까? – Hosam