티스토리 뷰

🍏/iOS

[CIKernel] CIColorKernel 에 대하여 알아보자

사용자 eungding 2020. 6. 12. 14:05
728x90
반응형

[CoreImage] 기본 필터 & 커스텀 필터 (OpenGL, Metal) 적용하기  이 포스팅에서 커스텀 필터 만들때, 
CIColorKernel 를 썼는데 더 자세히 알아보려고 합니다..!

 

 

CIColorKernel은 CIKernel 의 서브클래스로

이미지 프로세싱에서 딱 컬러값만 프로세싱해주고 싶을 때 사용합니다. 

 

 

[1] input type

 

0개 이상의 input images들을 받을 수 있습니다.

각각의 input image는 특정 타입의 파라미터로 표현됩니다. 

 

Core Image Kernel Language (OpenGL Shading Language) 에서는 파라미터 타입이 __sample 이고

Metal Shading Language 에서는 파라미터 타입이 sample_t 입니다. 

 

__sample은 vec4,

sampe_t는 float4 를 나타낸다고 합니다. 

 

 

코드 타고 들어가보면 이런식으로 되어있어요

 

 

 

기존 포스팅의 커널 코드를 보면 이미지 하나만 받으니까 파라미터는 한 개이고 

각각 인풋타입이 __sample, sample_t 인 것을  알 수 있습니다. 

 

 

OpenGL Shading  Language

 

 

 

Metal Shading Language

 

 

[2] return type

 

output image를 위한 pixel color를 리턴합니다. 

 

Core Image Kernel Language (OpenGL Shading Language) 에서는 리턴 타입이 vec4 이고

Metal Shading Language 에서는 리턴 타입이 float4 입니다. 

 

 

 

기존 포스팅의 커널 코드를 보면 리턴타입이 각각 vec4, float4로 되어있는 것을 알 수 있습니다. 

 

 

OpenGL Shading  Language

 

 

Metal Shading Language 

 

 

[3]  vec4, float4 

 

vec4는 vect타입 value 4개의 묶음,

float4는 float 타입 value 4개의 묶음 을 의미하는데요

 

순서대로 r, g, b, a 값을 의미합니다.

 

 

그래서 input과 똑같은 rgba 값을 리턴해주면 input이미지가 그대로 결과로 나오게 됩니다.

 

 

또는 이렇게 간략하게 해도 됩니다.

 

 

 

 

만약 input과 똑같은 rgb 값을 리턴해주고 알파값만 0.5로 바꿔주겠다고 하면

 

 

알파값만 변한 결과가 나오게 됩니다.

 

 

 

만약 b와 g의 값을 바꿔주게 된다면,,?!

 

 

이런 결과가 나오네요

 

 

만약 r과 g의 값을 바꿔주게 된다면...?

 

 

이런 결과가 나오네요

728x90
반응형
댓글
댓글쓰기 폼