📌

SwiftでUIImageからMlxArrayを作る

に公開

意外にすぐやり方見つからなかったので

func toMlxArray(image:UIImage)throws{
        guard let cgImage = image.cgImage else {
            fatalError("Invalid Image")
        }
        
        var cgImageFormat = vImage_CGImageFormat(
            bitsPerComponent: 8,
            bitsPerPixel: 32,
            colorSpace: Unmanaged.passUnretained(CGColorSpaceCreateDeviceRGB()),
            bitmapInfo: CGBitmapInfo(
                rawValue: CGImageAlphaInfo.last.rawValue
                | CGBitmapInfo.byteOrder32Big.rawValue
            ),
            version: 0,
            decode: nil,
            renderingIntent: .defaultIntent
        )
        
        let pixelBuffer = try vImage.PixelBuffer<vImage.Interleaved8x4>(
            cgImage: cgImage,
            cgImageFormat: &cgImageFormat
        )
        
        let width = pixelBuffer.width
        let height = pixelBuffer.height
        
        let mlxArray = pixelBuffer.withUnsafeBufferPointer { ptr in
            MLXArray(ptr, [height, width, 4])
        }
}

Discussion