2012-05-31 3 views
1

나는 이미지 필터 응용 프로그램을 작성 중입니다. 사용자가 필터를 선택하면 iOS 5 코어 이미지 필터에서 CIImage에서 얻은 UIImage 표시

context = [CIContext contextWithOptions:nil]; 



    beginImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"biscus_small.png"]]; 


    filter = [CIFilter filterWithName:@"CISepiaTone" 
            keysAndValues: kCIInputImageKey, beginImage, 
         @"inputIntensity", [NSNumber numberWithFloat:0.8], nil]; 

그런 다음 단순히 필터가 적용된 후 CIImage를 얻고있는 UIImageView에 할당 : 나는 아래의 코드를 사용하여 필터를 만들었습니다. 어떤 이유로 UIImageView setImage 후 흰색 (아무 것도) 표시합니다.

CIImage *outputImage = [filter outputImage]; 

    // CGImageRef cgimg = 
    // [context createCGImage:outputImage fromRect:[outputImage extent]]; 

    UIImage *finalImage = [UIImage imageWithCIImage:outputImage]; 

    [self.imageView setImage:finalImage]; 

나는 CIContext의 createCGImage 방법을 사용할 경우 다음 잘 작동 및 필터와 이미지를 표시하지만, createCGImage를 사용하는 것은 대단히 느리다.

답변

6

CIImage의 -createCGImage:fromRect:이 너무 느린 이유는 실제로 이것이 래스터 비트 맵의 ​​처리와 출력을 트리거하는 이유입니다. 출력 CIImage를 UIImage에 지정해도 이미지가 처리되고 렌더링되지 않습니다. 코어 이미지를 통해 이미지를 필터링 할 때이 단계를 피할 수 없습니다.

this answer에 언급했듯이 iOS에서 Core Image의 성능은 iOS 5.1에서 다소 실망 스럽습니다. 제안을 할 수 있다면 GPL 가속 이미지 처리를 수행하고 테스트 한 거의 모든 상황에서 Core Image의 성능을 능가하는 an open source framework을 구축했습니다. 이미지 필터링의 경우 iPhone 4의 코어 이미지보다 약 4 배 빠릅니다.

그러나 필터링 할 때 UIImage로 이동하는 데 약간의 오버 헤드가 있습니다. 따라서 raw로 작업 할 수있는 능력이 있다면 이미지 바이트, 내 원시 데이터 입력 및 출력 UIImages 다루는 것보다 훨씬 빠릅니다. 이 프레임 워크에서 직접 JPEG 및 PNG 입출력을 추가하여 UIImage를 통해 이동하는 것보다 빠른 경로를 제공 할 것입니다.

+0

브래드에게 감사드립니다. BTW Love 사랑은 iTunesU에서 수업을 좋아합니다. 고마워요! – azamsharp