SwiftUI_MaskingFunction

こんにちは EveryDaySoft代表の永田です。

今回はSwiftUIで、画像をマスキングするプログラムを紹介します。

https://github.com/daisukenagata/SwiftUI_CustomModifier

挙動

https://twitter.com/i/status/1263501389587640320

実装File

https://github.com/daisukenagata/SwiftUI_CustomModifier/blob/master/SwiftUI_CustomModifier/ViewModifier/CIMaskModifier.swift

SwiftUIからMask機能がシンプルになりましたが、一つの画像などでMaskをするのはプログラムを併用する必要がありました。

CoreImageを使用。

 CIFilter.colorMonochrome()

CIFilter.colorMonochromeというメソッドで、monochrome filterをかけます。

SwiftUIのImageに代入するため、このように実施しています。ob.ImageはSwiftUIで使用できるImageという型です。 UIkitはUIImageです。

2つのプロパティに計算したインスタンスを代入して、最終的にSwiftUIのImageに代入しています。

var uiImage = UIImage()
let imageView = UIImageView()

タップした際に外周か、内周をMaskするようにしています。

filter部分以外は基本的に同じです。

let currentFilterChange = CIFilter.colorInvert()

UIImageとCGImageとResizeの機能を使い、Maskをしています。

CGImageのmaskするメソッドは、昔からあります。こちらを使用してmaskの主な機能です。

/*Create an image mask. Legal values for bits per component are 1, 2, 4 and 8.
* Bits per pixel must be either the same as bits per component or 8, with
 * exception of 8 bits per component where bits per pixel can be also 16 or 32.
*/
@available(iOS 2.0, *)
public init?(maskWidth width: Int, height: Int, bitsPerComponent: Int, bitsPerPixel: Int, bytesPerRow: Int, provider: CGDataProvider, decode: UnsafePointer<CGFloat>?, shouldInterpolate: Bool)

Mask機能を拡張すると、文字解析もオリジナルのエンジンが作れるかもしれません。現在はSwiftUIでコアな部分を案件で作成したので、Android Kotlinでも作成中です。

以上、貴重なお時間お読み下さいまして、誠にありがとうございます。