
تحقق من عدم التزامن.
مستوحاة من Pixelkit & RenderKit.
رسومات حية لنظام التشغيل iOS و MacOS و TVOS
يعمل على Renderkit ، مدعوم من المعدن
يجمع Pixelkit بين التظليل المخصص ، وتظليل الأداء المعدني ، ومرشحات الصور الأساسية والرؤية لإنشاء أدوات لتقديم الوقت الفعلي.
أمثلة: تأثيرات الكاميرا - الشاشة الخضراء
معلومات: تنسيق المساحة - مشغلي المزيج - فانكات التأثير الراحة - وضع البتات العالية
| كاميرابيكس | DepthCamerapix | ImagePix | videopix | screencapturepix | StreamInpix | Slopepix |
| colorpix | CirclePix | rectanglepix | Polygonpix | arcpix | linepix | GradientPix | Stackpix |
| noisepix | TextPix | MetalPix | Twirlpix | ردود الفعل | تأخير | Sharpenpix | StreamoutPix |
| مستويات | Blurpix | Edgepix | ThresholdPix | antizepix | TransformPix | kaleidoscopepix |
| ChannelMixpix | Chromakeypix | CornerPinpix | colorshiftpix | flipfloppix | RangePix | Starpix |
| sepiapix | ConvertPix | تقليل بيكس | Clamppix | Freezepix | Flarepix | AirPlaypix | recordpix |
| Blendpix | crosspix | lookuppix | إزاحة | Remappix | reorderpix | ResolutionPix | croppix |
| blendpix | 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 )
}
} في pixelkit جميع pixs لها دقة. حددت بعض PIXs قرارات (افتراضي لـ .auto ) وبعض PIXs قد اشتقت القرارات.
سوف يملأ دقة .auto العرض والحصول على الدقة الصحيح بناءً على حجم العرض. إذا كانت طريقة العرض 100 × 100 نقطة ، فستكون الدقة 200 × 200 بكسل على جهاز MacOS و 300 × 300 بكسل على iPhone.
استيراد حزمة القرار للعمل مع القرارات:
import Resolution يمكنك مضاعفة وتقسيم القرارات باستخدام CGFloat أو Int .
هناك قرارات محددة مسبقًا مثل ._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 )
}
} يمكن أيضًا القيام بذلك مع فانكات الراحة في التأثير:
let pix = CameraPIX ( ) . pixBrightness ( 1.5 ) . pixGamma ( 0.5 ) . pixSaturation ( 0.5 ) . pixBlur ( 0.25 ) تذكر أن تضيف NSCameraUsageDescription إلى info.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 ) يمكن أيضًا القيام بذلك مع عوامل المزيج و funcs راحة التأثير:
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 في Pixelkit v0.8.4 ويتطلب iPhone X أو الأحدث.
ملاحظة لاستخدام setup(with:filter:) طريقة DepthCameraPIX .
سوف يهتم بالتوجه واللون وتمكين العمق على CameraPIX .
للوصول إلى قيم العمق أوسيد من 0.0 و 1.0 ،
تمكين وضع 16 bit مثل هذا: 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 ) لاحظ MultiCameraPIX يتطلب iOS 13.
يتم توجيه مساحة إحداثيات Pixelkit إلى المحور العمودي (1.0 في الارتفاع) مع الأصل (0.0 ، 0.0) في المركز.
لاحظ أنه بالمقارنة مع Uikit الأصلي و Swiftui ، يتم قلب المحور العمودي ويتم نقل الأصل ، وهذا أكثر بروزًا عند العمل مع الرسومات في PixelKit. يتم تعريف الدوران الكامل بواسطة 1.0
المركز: cgpoint (x: 0 ، y: 0)
أسفل اليسار: CGPOINT (X: -0.5 * SIDERTARATIO ، Y: -0.5)
أعلى اليمين: CGPOINT (X: 0.5 * SIDERTIO ، Y: 0.5)
نصيحة: Resolution له خاصية .aspect
let aspectRatio: CGFloat = Resolution._1080p.aspect
طريقة سريعة ومريحة لمزج البيكسلات
هذه هي مشغلي BlendingMode المدعوم:
& | !& | + | - | * | ** | !** | % | ~ | ° |
|---|---|---|---|---|---|---|---|---|---|
| . أكثر | .تحت | .يضيف | .طرح | .ضاعف | قوة | . جاما | .اختلاف | .متوسط | جيب التمام |
<> | >< | ++ | -- | <-> | >-< | +-+ |
|---|---|---|---|---|---|---|
| .الحد الأدنى | .maximum | .addwithalpha | .subrictwithalpha | في الداخل | الخارج | حصري |
let blendPix = ( CameraPIX ( ) !** NoisePIX ( at : . fullHD ( . portrait ) ) ) * CirclePIX ( at : . fullHD ( . portrait ) ) وضع ملء مشغل المزيج العالمي الافتراضي هو .fit ، قم بتغييره مثل هذا:
PIX.blendOperators.globalPlacement = .fill
ضع في اعتبارك أن هذه funcs ستنشئ بيكسلات جديدة.
كن حذرا من زيادة تحميل ذاكرة GPU ، بعض funcs تنشئ العديد من pixs.
يمكن أن تستفيد بعض التأثيرات مثل Decomacepix و SlopePix من عمق بت أعلى.
الافتراضي هو 8 بت. تغييره مثل هذا: PixelKit.main.render.bits = ._16
تمكين وضع البتات العالية قبل إنشاء أي بيكسلات.
لا تدعم موارد الملاحظات البتات الأعلى بعد.
يوجد حاليًا بعض إزاحة جاما مع الموارد.

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.5مستوحى من TouchDesigner الذي أنشأه Anton Heestand Xyz