티스토리 뷰
CIWarpKernel은 CIKernel 의 서브클래스로
이미지에서 geometry 관련 정보만 프로세싱 할 때 쓰인다고 합니다.
Warp라는 단어는 " (원래의 모습을 잃고) 휘게 만들다" 라는 뜻을 가지고 있습니다.
[1] input type
Core Image Kernel Language에서는 input 파라미터가 필요없는 것같고
Metal Shading Language에서는 input type이 destination인데,
destination은 float2를 의미합니다.
[2] return type
이미지 좌표의 포지션을 리턴해줍니다.
Core Image Kernel Language에서는 리턴타입이 vec2,
Metal Shading Language에서는 리턴타입이 float2 입니다.
=> 아래에서 여러 예제를 돌려보니까
center값 (x,y) 을 의미하는 것 같아요..!
[3] 예제
우선 CIWarpKernel은 딱 하나의 인풋 이미지만 사용한다고 합니다--!!
CIWarpKernel 전용 apply함수를 보면 이렇게 image 파라미터가 따로 있습니다.
그래서 CIColorKernel 처럼 arguments에 인풋 이미지를 넘겨주는게 아니라
let kernel = try! CIColorKernel(functionName: "myColor3", fromMetalLibraryData: data)
let output = kernel.apply(extent: beginImage.extent, arguments: [beginImage as Any])!
image파라미터에 인풋이미지를 넘겨주고 arguments는 비워둡니다.
let kernel = try! CIWarpKernel(functionName: "warp", fromMetalLibraryData: data)
let outputImage = kernel.apply(extent: beginImage.extent, roiCallback: { (index, rect) -> CGRect in
return rect
}, image: beginImage, arguments: [])!
그리고 roiCallBack 은 뭔지 모르겠어서 그냥 rect를 리턴해줬습니다.
문서에는 이렇게 예제가 나와있어요
그럼 테스트해볼 최종 코드는 이렇게 되겠습니다. (강제 언래핑 부분은 절대 따라하지마시오!!!)
메탈 파일을 만들고 그 안에 warp함수를 만들어줍니다
인풋이미지의 포지션을 그대로 리턴해주는 함수로 시작하겠습니다.
위의 코드를 돌려보면
원본이미지와 같게 결과가 나옵니다.
x쪽으로 - 200, y쪽으로+ 200 가게 해주면,,?
두배 해주면,,,?
1/2 해주면,,,?
x, y 값을 서로 바꿔주면...?
'🍏 > iOS' 카테고리의 다른 글
[iOS] Lookup Table Image (LUT Image)로 필터 적용하기 with CIColorCube, Metal (2) | 2020.06.23 |
---|---|
[iOS] Steps to create image filters with designers (디자이너와 이미지 필터 만드는 법) (0) | 2020.06.16 |
[CIKernel] CIBlendKernel에 대해 알아보자 (0) | 2020.06.12 |
[CIKernel] CIColorKernel 에 대하여 알아보자 (0) | 2020.06.12 |
[CoreImage] 기본 필터 & 커스텀 필터 (OpenGL, Metal) 적용하기 (0) | 2020.06.12 |
- Total
- Today
- Yesterday
- flutter deep link
- Dart Factory
- Django FCM
- flutter dynamic link
- Watch App for iOS App vs Watch App
- 장고 URL querystring
- 플러터 싱글톤
- SerializerMethodField
- drf custom error
- Sketch 누끼
- DRF APIException
- Flutter Clipboard
- Flutter getter setter
- METAL
- 플러터 얼럿
- ribs
- Flutter Text Gradient
- Django Firebase Cloud Messaging
- 구글 Geocoding API
- flutter build mode
- Flutter 로딩
- Flutter Spacer
- ipad multitasking
- cocoapod
- Django Heroku Scheduler
- flutter 앱 출시
- github actions
- Python Type Hint
- PencilKit
- 장고 Custom Management Command
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |