2013-08-07 3 views
0

나는 붉은 색과 시안 색의 버전을 나누어서 시차를 설정하여 애너 글리프를 만드는 데 사용하는 이미지가 있습니다.UIImage에서 색상을 제거하는 가장 빠른 방법은 무엇입니까?

원본 이미지는 1146 x 580 (망막 해상도)입니다. 각 이미지를 만들려면 CIColorMatrix를 사용하고 있습니다. 다음은 Red를 모두 제거하는 Cyan 버전의 코드입니다.

-(UIImage *)createCyan:(UIImage *)anImage 
{ 

    CIImage *inputImage = [CIImage imageWithCGImage:anImage.CGImage]; 

    CIFilter *matrixFilter = [CIFilter filterWithName:@"CIColorMatrix"]; 
    [matrixFilter setDefaults]; 
    [matrixFilter setValue:inputImage forKey:kCIInputImageKey]; 
    [matrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:0] forKey:@"inputRVector"]; 
    [matrixFilter setValue:[CIVector vectorWithX:0 Y:1 Z:0 W:0] forKey:@"inputGVector"]; 
    [matrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:1 W:0] forKey:@"inputBVector"]; 
    [matrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:1] forKey:@"inputAVector"]; 

    CIImage *outputImage = [matrixFilter outputImage]; 

    CIContext *context = [CIContext contextWithOptions:nil]; 
    CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; 

    return [UIImage imageWithCGImage:cgimg]; 
} 

문제는 처리하는 데 1 초 이상 걸리는 것입니다. 나는 동일한 것을 성취하는 훨씬 더 빠른 수단 (존재한다면)을 찾아야한다.

더 좋은 방법이 있습니까?

+1

컬러 큐브를 만들어서 만들 수 있습니까? 일반적으로 CIFilter 및 Core Image에 대한 WWDC 2013 (또는 2012) 비디오가 있습니다. 내장 된 색상 맵을 사용하는 대신 자신의 색상 맵을 만들어 이미지 처리 속도를 높이는 멋진 방법을 보여줍니다. – Fogmeister

+0

감사합니다. 내가 한번 볼게. –

+1

@Fogmeister, 당신이 의미하는 것은 2012 년부터 세션 511입니다. 훌륭합니다. https://developer.apple.com/videos/wwdc/2012/?id=511 핵심 이미지 기술 –

답변

0

속도 문제는 필터가 그다지 중요하지 않지만 매우 비싼 프로세스 인 CIContext을 반복적으로 초기화하고 있습니다. 미리 CIContext을 작성하면 문제가 해결됩니다.