필터 앱을 만들기 위해, LUT(필터 데이터)를 원본 이미지에 적용하는 함수에 대한 수도코드를 아래처럼 짜보았다.
1. 소스 이미지(srcImage)와 LUT 이미지(lutImage)를 불러온다.
2. 소스 이미지와 LUT 이미지의 비트맵 형식을 확인한다.
3. 소스 이미지의 각 픽셀에 대해 반복하며 다음을 수행한다:
- **픽셀의 RGB 값을 가져온다.**
- LUT 이미지에서 해당 RGB 값을 찾아 변환된 RGB 값을 가져온다.
- 변환된 RGB 값을 가진 새로운 픽셀을 생성한다.
- 새로운 픽셀을 변환된 이미지([newImage])에 추가한다.
4. 변환된 이미지([newImage])를 저장하거나 사용한다.
즉, 나는 이미지에 대해 공부해야했고, iOS 환경에서는 이미지 비트맵에 어떻게 접근할 수 있는지에 대해 공부해야 했다.
iOS에서는 일반적으로 Core Graphics나 Core Image와 같은 시스템 프레임워크를 사용하여 이미지 처리를 수행한다. 나는 Low한 환경에서 직접 LUT의 비트맵 데이터를 다룰 것이기 때문에, Core Graphics를 사용했다.
우선 이미지에 대해 간단히 공부했다.
이미지 표현 방식에는 비트맵(Bitmap)과 벡터(Vector)방식이 있다.
나는 비트맵 이미지 프로세싱을 할 것이기 때문에, 픽셀에 대한 학습도 필요했다.
이미지를 구성하는 최소단위의 점. rgb
혹은 rgba
정보를 가진다.
간단하다. UIImage
를 CGImage
로 변환하면 된다.
앱상에서 이미지 데이터를 관리하는 객체, UIKit안에 포함되어 있다.
비트맵 이미지 또는 이미지 마스크 Core Graphics 안에 포함되어 있다.
Core Graphics의 공식문서를 보면, 'Handle path-based drawing, antialiased rendering, gradients, images, color management, PDF documents, and more.' 라고 최상단에 설명되어 있다. 즉, 이미지의 색상, 그라디언트, 음영, 렌더링 등 LUT와 관련된 작업을 하려면 이 프레임워크를 반드시 사용해야하는 것이다. iOS2.0 이상부터 지원한다.
UIImage(cgImage: cgimg)
이런 식으로 다시 UIImage로 바꾸어 UI에 보여준다.즉, LUT와 원본 이미지를 CGImage(비트맵)으로 변환하고, 두 비트맵 배열을 인자로 받아 각 RGB 값을 변환해주는 함수를 만들면 되는 것이다.
필터앱을 만들기 위한 아이디어가 어느정도 구상되었다.