小编Shr*_*aya的帖子

如何使RealmSwift RealmOptional与Swift Codable兼容?

我面临着一个问题,即我无法使RealmOptional与带有json解码器的快速新Codable功能兼容。

考虑以下Realm对象。

class School: Object, Codable {

    @objc dynamic var id: Int64 = 0

    @objc dynamic var name: String?
    var numberOfStudents = RealmOptional<Int64>()
    var classes = List<Class>()

    enum CodingKeys: String, CodingKey {
       case id
       case name
       case numberOfStudents
       case classes
    }
}

class Class: Object, Codable {
    var name: String?
    var numberOfStudents = RealmOptional<Int64>()
}
Run Code Online (Sandbox Code Playgroud)

在这里我们可以将类声明为Codable,因为我借助此要点为RealmOptinal编写了扩展。但是问题是解码器解码json时。

考虑这个json

let jsonData = """
[
    "id": 1234,
    "name": "Shreesha",
    "numberOfStudents": nil,
    "classes": {
       "name": "Class V",
       "numberOfStudents": 12
    }
]
""".data(using: …
Run Code Online (Sandbox Code Playgroud)

realm swift codable jsondecoder

6
推荐指数
1
解决办法
1441
查看次数

如何将MTLTexture转换为CVpixelBuffer以写入AVAssetWriter?

我要求在实时视频上应用过滤器,我正在尝试在Metal中进行过滤.

但是在将过滤器编码为目标过滤器之后,我遇到了将MTLTexture转换为CVPixelBuffer的问题.参考(https://github.com/oklyc/MetalCameraSample-master-2)

这是我的代码.

if let pixelBuffer = pixelBuffer {
                CVPixelBufferLockBaseAddress(pixelBuffer, CVPixelBufferLockFlags.init(rawValue: 0))             
                let region = MTLRegionMake2D(0, 0, Int(currentDrawable.layer.drawableSize.width), Int(currentDrawable.layer.drawableSize.height))                    
                let bytesPerPixel = 4;
                let bytesPerRow = CGFloat(bytesPerPixel) * currentDrawable.layer.drawableSize.width

                let tempBuffer = CVPixelBufferGetBaseAddress(pixelBuffer)
                destinationTexture.getBytes(tempBuffer!, bytesPerRow: Int(bytesPerRow), from: region1, mipmapLevel: 0)

                let image = self.imageFromCVPixelBuffer(buffer: pixelBuffer)
                CVPixelBufferUnlockBaseAddress(pixelBuffer, CVPixelBufferLockFlags.init(rawValue: 0))

            }
Run Code Online (Sandbox Code Playgroud)

imageFromCVPixelBuffer方法看起来像这样.

func imageFromCVPixelBuffer(buffer: CVPixelBuffer) -> UIImage {

    let ciimage = CIImage(cvPixelBuffer: buffer)
    let context = CIContext(options: nil)
    let cgimgage = context.createCGImage(ciimage, from: CGRect(x: 0, y: 0, width: CVPixelBufferGetWidth(buffer), height: …
Run Code Online (Sandbox Code Playgroud)

ios swift metal metalkit metal-performance-shaders

3
推荐指数
1
解决办法
2756
查看次数

如何在金属中使用texture2d_array数组?

我一直在尝试使用texture2d_array来应用金属中的实时滤镜。但我没有得到正确的结果。

我像这样创建纹理数组,

代码:Class MetalTextureArray

class MetalTextureArray {
private(set) var arrayTexture: MTLTexture
private var width: Int
private var height: Int

init(_ width: Int, _ height: Int, _ arrayLength: Int, _ device: MTLDevice) {
    self.width = width
    self.height = height

    let textureDescriptor = MTLTextureDescriptor()

    textureDescriptor.textureType = .type2DArray
    textureDescriptor.pixelFormat = .bgra8Unorm
    textureDescriptor.width = width
    textureDescriptor.height = height
    textureDescriptor.arrayLength = arrayLength

    arrayTexture = device.makeTexture(descriptor: textureDescriptor)
}

func append(_ texture: MTLTexture) -> Bool {
    if let bytes = texture.buffer?.contents() {
        let region = …
Run Code Online (Sandbox Code Playgroud)

fragment-shader ios metal

2
推荐指数
1
解决办法
4438
查看次数