CIFilter

Horus-iOS·2022년 5월 31일
0

https://developer.apple.com/documentation/coreimage/cifilter

An image processor that produces an image by manipulating one or more input images or by generating new image data.

하나 혹은 하나 이상의 인풋 이미지를 조작하거나 새 이미지 데이터를 생성해서 이미지를 제공하는 이미지 프로세서입니다.

Declaration

class CIFilter : NSObject

Overview

CIFilter 클래스는 아웃풋인 CIImage 객체를 제공합니다. 보통 필터는 하나 혹은 하나 이상의 이미지를 인풋으로 받아들입니다. 그러나 몇 가지 필터는 다른 타입의 인풋 파라미터에 기반해 이미지를 생성합니다. CIFilter 객체의 파라미터는 키값 쌍의 사용을 통해서 설정되거나 검색됩니다.

이미지 처리, 필터 생성기 생성, 커스텀 필터 작성 시 내장된 코어 이미지 필터를 이용하기 위해서 CIImage, CIContext, CIColor와 같은 다른 코어 이미지 클래스의 사용과 동시에 CIFilter 객체를 사용할 수 있습니다.

CIFilter 객체는 변경 가능(mutable)한 객체이므로 스레드 사이에서 안전하게 공유될 수 없습니다. 각 스레드는 고유한 CIFilter 객체를 생성해야 하지만, 스레드 사이에서 필터의 변경 불가능한 인풋 및 아웃풋 CIImage 객체를 전달할 수는 있습니다.

코어 이미지 필터의 설정 및 사용에 대한 전반적인 내용은 Core Image Programming Guide를 보시기 바랍니다.

Core Image Programming Guide
https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_intro/ci_intro.html#//apple_ref/doc/uid/TP30001185

Subclassing Notes

커스텀 필터 효과를 생성하기 위해 CIFIlter를 서브클래싱할 수 있습니다.

  • 둘 혹은 이상의 내장된 코어 이미지 필터를 함께 체이닝할 수 있습니다.
  • 직접 작성한 이미지 프로세싱 커널을 사용할 수 있습니다.

자세한 내용은 Core Image Programming Guide를 보시기 바랍니다.

Core Image Programming Guide
https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_intro/ci_intro.html#//apple_ref/doc/uid/TP30001185

Methods to Override

서브클래스가 체이닝 필터를 사용해서 효과를 제공하는 경우나 직접 커널을 구현하는 경우 모두 상관없이 아래 내용을 수행해야 합니다.

  • inputImage처럼 input 프리픽스를 갖는 속성으로 인풋 파라미터를 선언해야 합니다.
  • 직접 선언한 모든 인풋 파라미터의 기본값을 제공할 수 있도록 setDefaults() 메소드를 오버라이드해야 합니다.
  • 필터의 효과와 함께 새로운 CIImage를 생성하기 위해서 outputImage 메소드를 구현해야 합니다.

Special Considerations

CIFilter 필터의 아카이빙, 복사, 메모리 해제 시 인풋 파라미터를 자동으로 관리합니다. 이와 같은 이유로 서브클래스는 적합한 동작을 보장할 수 있도록 아래 가이드라인을 따라야 합니다.

  • input 프리픽스를 갖는 이름으로 인스턴스 변수에 인풋 파라미터를 저장해야 합니다.
    자동으로 합성된 인스턴스 변수를 사용하지 않아야 합니다. 왜냐하면 이름은 언더스코어와 함께 자동으로 프리픽스되기 때문입니다. 대신 속성을 직접 합성하시기 바랍니다. 예를 들면 아래와 같습니다.
    @synthesize inputMyParamerer;

  • 매뉴얼 레퍼런스 카운팅을 사용하는 경우 dealloc 메소드 구현에서 인풋 파라미터 인스턴스 변수를 해제하지 않아야 합니다. CIFilter 클래스에서 dealloc 구현은 모든 인풋 파라미터가 자동으로 nil로 설정되도록 키값 코딩을 사용하고 있습니다.

0개의 댓글