
Lihat Asyncgraphics.
Terinspirasi oleh Pixelkit & RenderKit.
Grafik langsung untuk iOS, macOS dan TVOS
Berjalan di renderkit, ditenagai oleh logam
PixelKit menggabungkan shader khusus, shader kinerja logam, filter gambar inti dan visi untuk membuat alat untuk rendering real-time.
Contoh: Efek Kamera - Layar Hijau
Info: Ruang Koordinat - Operator Blend - Fungsi Kenyamanan Efek - Mode Bit Tinggi
| Camerapix | DEPTHCAMERAPIX | ImagePix | Videopix | Screencapturepix | Streaminpix | Slopepix |
| Colorpix | CirclePix | Rectanglepix | Polygonpix | Arcpix | Linepix | Gradientpix | Stackpix |
| Noisepix | Textpix | Metalpix | Twirlpix | Umpan balik | Delaypix | Sharpenpix | Streamoutpix |
| Levelspix | Blurpix | Edgepix | Thresholdpix | QuantizePix | Transformpix | Kaleidoscopepix |
| Channelmixpix | Chromakeypix | Cornerpinpix | Colorshiftpix | Flipfloppix | Rangepix | Starpix |
| Sepiapx | Convertpix | Redupingpix | CLOCPPIX | Freezepix | Flarepix | AirPlaypix | Recordpix |
| Blendpix | Crosspix | Lookuppix | Displacepix | Remappix | Reorderpix | Resolutionpix | Croppix |
| Blendspix | Lumalevelspix | Lumablurpix | Lumatransformpix | Timemachinepix | Arraypix |
. package ( url : " https://github.com/heestand-xyz/PixelKit " , from : " 3.0.0 " ) import SwiftUI
import PixelKit
struct ContentView : View {
@ StateObject var circlePix = CirclePIX ( )
@ StateObject var blurPix = BlurPIX ( )
var body : some View {
PixelView ( pix : blurPix )
. onAppear {
blurPix . input = circlePix
blurPix . radius = 0.25
}
}
}import UIKit
import PixelKit
class ViewController : UIViewController {
override func viewDidLoad ( ) {
super . viewDidLoad ( )
let circlePix = CirclePIX ( )
let blurPix = BlurPIX ( )
blurPix . input = circlePix
blurPix . radius = 0.25
let finalPix : PIX = blurPix
finalPix . view . frame = view . bounds
view . addSubview ( finalPix . view )
}
} Di Pixelkit semua pix memiliki resolusi. Beberapa pix telah menentukan resolusi (default ke .auto ) dan beberapa pix telah memperoleh resolusi.
Resolusi .auto akan mengisi tampilan dan mendapatkan resolusi yang benar berdasarkan ukuran tampilan. Jika tampilan adalah 100x100 poin, resolusi akan menjadi 200x200 piksel pada macOS dan 300x300 piksel di iPhone.
Impor paket resolusi untuk bekerja dengan resolusi:
import Resolution Anda dapat melipatgandakan dan membagi resolusi dengan CGFloat atau Int .
Ada resolusi yang telah ditentukan seperti ._1080p & ._4K .
. renderedImage // UIImage or NSImage
. renderedTexture // MTLTexture![]() | ![]() | ![]() | ![]() | ![]() |
|---|
import SwiftUI
import PixelKit
class ViewModel : ObservableObject {
let camera : CameraPIX
let levels : LevelsPIX
let colorShift : ColorShiftPIX
let blur : BlurPIX
let circle : CirclePIX
let finalPix : PIX
init ( ) {
camera = CameraPIX ( )
camera . cameraResolution = . _1080p
levels = LevelsPIX ( )
levels . input = camera
levels . brightness = 1.5
levels . gamma = 0.5
colorShift = ColorShiftPIX ( )
colorShift . input = levels
colorShift . saturation = 0.5
blur = BlurPIX ( )
blur . input = colorShift
blur . radius = 0.25
circle = CirclePIX ( at : . square ( 1080 ) )
circle . radius = 0.45
circle . backgroundColor = . clear
finalPix = blur & ( camera * circle )
}
}
struct ContentView : View {
@ StateObject var viewModel = ViewModel ( )
var body : some View {
PixelView ( pix : viewModel . finalPix )
}
} Ini juga dapat dilakukan dengan fungsi kenyamanan efek:
let pix = CameraPIX ( ) . pixBrightness ( 1.5 ) . pixGamma ( 0.5 ) . pixSaturation ( 0.5 ) . pixBlur ( 0.25 ) RemeBer untuk menambahkan NSCameraUsageDescription ke info Anda.plist
![]() | ![]() | ![]() | ![]() |
|---|
import RenderKit import PixelKit
let cityImage = ImagePIX ( )
cityImage . image = UIImage ( named : " city " )
let supermanVideo = VideoPIX ( )
supermanVideo . load ( fileNamed : " superman " , withExtension : " mov " )
let supermanKeyed = ChromaKeyPIX ( )
supermanKeyed . input = supermanVideo
supermanKeyed . keyColor = . green
let blendPix = BlendPIX ( )
blendPix . blendingMode = . over
blendPix . inputA = cityImage
blendPix . inputB = supermanKeyed
let finalPix : PIX = blendPix
finalPix . view . frame = view . bounds
view . addSubview ( finalPix . view ) Ini juga dapat dilakukan dengan operator campuran dan fungsi kenyamanan efek:
let pix = cityImage & supermanVideo . pixChromaKey ( . green ) import RenderKit import PixelKit
let cameraPix = CameraPIX ( )
cameraPix . camera = . front
let depthCameraPix = DepthCameraPIX . setup ( with : cameraPix )
let levelsPix = LevelsPIX ( )
levelsPix . input = depthCameraPix
levelsPix . inverted = true
let lumaBlurPix = cameraPix . pixLumaBlur ( pix : levelsPix , radius : 0.1 )
let finalPix : PIX = lumaBlurPix
finalPix . view . frame = view . bounds
view . addSubview ( finalPix . view ) DepthCameraPIX ditambahkan di PixelKit v0.8.4 dan membutuhkan iPhone X atau yang lebih baru.
Catatan untuk menggunakan setup(with:filter:) Metode DepthCameraPIX .
Ini akan mengurus orientasi, warna dan memungkinkan kedalaman di CameraPIX .
Untuk mendapatkan akses ke nilai kedalaman ouside dari batas 0,0 dan 1,0,
Aktifkan mode 16 bit seperti ini: PixelKit.main.render.bits = ._16
let cameraPix = CameraPIX ( )
cameraPix . camera = . back
let multiCameraPix = MultiCameraPIX . setup ( with : cameraPix , camera : . front )
let movedMultiCameraPix = multiCameraPix . pixScale ( by : 0.25 ) . pixTranslate ( x : 0.375 * ( 9 / 16 ) , y : 0.375 )
let finalPix : PIX = camearPix & movedMultiCameraPix
finalPix . view . frame = view . bounds
view . addSubview ( finalPix . view ) Catatan MultiCameraPIX membutuhkan iOS 13.
Ruang koordinat pixelkit dinamai dengan sumbu vertikal (tinggi 1,0) dengan asal (0,0, 0,0) di tengah.
Perhatikan bahwa dibandingkan dengan pandang asli UIKIT dan SwiftUi. Sumbu vertikal terbalik dan asal dipindahkan, ini lebih konvinensi ketika bekerja dengan grafik di Pixelkit. Rotasi penuh ditentukan oleh 1.0
Pusat: CGPoint (x: 0, y: 0)
Kiri bawah: cgpoint (x: -0.5 * aspectratio, y: -0.5)
Kanan Atas: CGPoint (x: 0,5 * Aspectratio, Y: 0,5)
Kiat: Resolution memiliki properti .aspect :
let aspectRatio: CGFloat = Resolution._1080p.aspect
Cara cepat dan nyaman untuk memadukan pix
Ini adalah operator BlendingMode yang didukung:
& | !& | + | - | * | ** | !** | % | ~ | ° |
|---|---|---|---|---|---|---|---|---|---|
| .lebih | .di bawah | .menambahkan | .mengurangi | .berkembang biak | .kekuatan | .gamma | .perbedaan | .rata-rata | kosinus |
<> | >< | ++ | -- | <-> | >-< | +-+ |
|---|---|---|---|---|---|---|
| .minimum | .maksimum | .addwithalpha | .subtractwithalpha | di dalam | di luar | eksklusif |
let blendPix = ( CameraPIX ( ) !** NoisePIX ( at : . fullHD ( . portrait ) ) ) * CirclePIX ( at : . fullHD ( . portrait ) ) Mode pengisian operator campuran global default adalah .fit , ubah seperti ini:
PIX.blendOperators.globalPlacement = .fill
Perlu diingat bahwa fungsi -fungsi ini akan membuat pix baru.
Hati -hati dengan memori GPU yang berlebihan, beberapa fungsi membuat beberapa pix.
Beberapa efek seperti Displacepix dan Slopepix dapat mengambil manfaat dari kedalaman bit yang lebih tinggi.
Standarnya adalah 8 bit. Ubah seperti ini: PixelKit.main.render.bits = ._16
Aktifkan mode bit tinggi sebelum Anda membuat pixs apa pun.
Catatan sumber daya belum mendukung bit yang lebih tinggi.
Saat ini ada beberapa gamma offset dengan sumber daya.

let metalPix = MetalPIX ( at : . _1080p , code :
"""
pix = float4(u, v, 0.0, 1.0);
"""
) let metalEffectPix = MetalEffectPIX ( code :
"""
float gamma = 0.25;
pix = pow(input, 1.0 / gamma);
"""
)
metalEffectPix . input = CameraPIX ( ) let metalMergerEffectPix = MetalMergerEffectPIX ( code :
"""
pix = pow(inputA, 1.0 / inputB);
"""
)
metalMergerEffectPix . inputA = CameraPIX ( )
metalMergerEffectPix . inputB = ImagePIX ( " img_name " ) let metalMultiEffectPix = MetalMultiEffectPIX ( code :
"""
float4 inPixA = inTexs.sample(s, uv, 0);
float4 inPixB = inTexs.sample(s, uv, 1);
float4 inPixC = inTexs.sample(s, uv, 2);
pix = inPixA + inPixB + inPixC;
"""
)
metalMultiEffectPix . inputs = [ ImagePIX ( " img_a " ) , ImagePIX ( " img_b " ) , ImagePIX ( " img_c " ) ] var lumUniform = MetalUniform ( name : " lum " )
let metalPix = MetalPIX ( at : . _1080p , code :
"""
pix = float4(in.lum, in.lum, in.lum, 1.0);
""" ,
uniforms : [ lumUniform ]
)
lumUniform . value = 0.5Terinspirasi oleh TouchDesigner yang diciptakan oleh Anton Heestand XYZ