티스토리 뷰
CIBlendKernel는 CIColorKernel의 서브클래스입니다.
두개의 이미지를 blending (혼합) 하는데 사용한다고 합니다.
[1] input type
두개의 파라미터를 가집니다. (foreground image와 background image)
Core Image Kernel Language 라면 인풋 타입이 __sample
Metal Shading Language 라면 인풋 타입이 sample_t 입니다.
[2] return type
pixel color for the output image를 리턴합니다.
Core Image Kernel Language 라면 리턴 타입이 vec4
Metal Shading Language 라면 리턴 타입이 float4 입니다.
[3] 예제
Background image하나를 넣어줍니다.

메탈 파일에 averageBlend라는 함수를 추가해줍니다.
두개 input image의 rgba 값의 평균을 리턴해줍니다.
foreground와 background를 반반씩 블렌딩하려는 것 같아요

그리고 CIBlendKernel을 만들고 돌려주세요~
(폭풍 강제 언래핑...실제로 이렇게 따라하면 안됩니다..)
import UIKit | |
class ViewController: UIViewController { | |
@IBOutlet weak var imgView: UIImageView! | |
var beginImage: CIImage! | |
var context: CIContext! | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
self.beginImage = CIImage(image: UIImage(named: "milk")!) | |
self.context = CIContext(options: nil) | |
self.applyBlendKernel() | |
} | |
func applyBlendKernel() { | |
let backgroundImage = CIImage(image: UIImage(named: "background")!)! | |
let url = Bundle.main.url(forResource: "default", withExtension: "metallib")! | |
let data = try! Data(contentsOf: url) | |
let kernel = try! CIBlendKernel(functionName: "averageBlend", fromMetalLibraryData: data) | |
let outputImage = kernel.apply(foreground: beginImage, background: backgroundImage)! | |
if let cgimg = context.createCGImage(outputImage, from: outputImage.extent) { | |
let processedImage = UIImage(cgImage: cgimg) | |
self.imgView.image = processedImage | |
} | |
} | |
} |
그러면 이렇게 백그라운드 이미지와 블렌딩이 된 결과가 나오네요...!

[4] Builtin Blend Kernels
3번처럼 따로 메탈파일에 blend함수 안만들어줘도
빌트인 커널들을 사용할 수 있습니다 (꽤 많아요)

그 중에서 vividLight라는 것을 써볼게요-!

func applyBlendKernel() { | |
let backgroundImage = CIImage(image: UIImage(named: "background")!)! | |
let kernel = CIBlendKernel.vividLight | |
let outputImage = kernel.apply(foreground: beginImage, background: backgroundImage)! | |
if let cgimg = context.createCGImage(outputImage, from: outputImage.extent) { | |
let processedImage = UIImage(cgImage: cgimg) | |
self.imgView.image = processedImage | |
} | |
} |

'🍏 > iOS' 카테고리의 다른 글
[iOS] Steps to create image filters with designers (디자이너와 이미지 필터 만드는 법) (0) | 2020.06.16 |
---|---|
[CIKernel] CIWarpKernel에 대해 알아보자 (0) | 2020.06.12 |
[CIKernel] CIColorKernel 에 대하여 알아보자 (0) | 2020.06.12 |
[CoreImage] 기본 필터 & 커스텀 필터 (OpenGL, Metal) 적용하기 (0) | 2020.06.12 |
[UIKeyCommand] UIKeyCommand로 키보드의 방향키(Up, Down, Left, Right)를 인지해보자 (0) | 2020.05.11 |
- Total
- Today
- Yesterday
- SerializerMethodField
- ipad multitasking
- Flutter 로딩
- flutter build mode
- Django Heroku Scheduler
- Flutter Clipboard
- flutter deep link
- Flutter getter setter
- Django Firebase Cloud Messaging
- Python Type Hint
- github actions
- Flutter Spacer
- flutter dynamic link
- Watch App for iOS App vs Watch App
- 장고 URL querystring
- flutter 앱 출시
- ribs
- Sketch 누끼
- DRF APIException
- METAL
- 플러터 얼럿
- drf custom error
- 플러터 싱글톤
- cocoapod
- Dart Factory
- 구글 Geocoding API
- Django FCM
- 장고 Custom Management Command
- Flutter Text Gradient
- PencilKit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |