Swift 4.2 конвертирует 2d Double array (вывод пользовательской модели tflite в Firebase) в UIImage - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть вывод из пользовательской модели tflite (двойной массив 256x256), и я хочу преобразовать эти данные в UIImage.

вот мой код прямо сейчас:

  func toByteArray<T>(_ value: T) -> [UInt8] {
    var value = value
    return withUnsafePointer(to: &value) {
    $0.withMemoryRebound(to: UInt8.self, capacity: MemoryLayout<T>.size) {
        Array(UnsafeBufferPointer(start: $0, count: MemoryLayout<T>.size))
  }
}

Функция toByteArray принимаетзначение и преобразует его в форму UInt8.

    let pixelData = self.toByteArray(double_array)
    let height = 256
    let width = 256
    let numComponents = 1
    let numBytes = height * width * numComponents
    let colorspace = CGColorSpaceCreateDeviceGray()
    let rgbData = CFDataCreate(nil, pixelData, numBytes)!
    let provider = CGDataProvider(data: rgbData)!
    let rgbImageRef = CGImage(width: width,
                              height: height,
                              bitsPerComponent: 8,
                              bitsPerPixel: 8 * numComponents,
                              bytesPerRow: width * numComponents,
                              space: colorspace,
                              bitmapInfo: CGBitmapInfo(rawValue: 0),
                              provider: provider,
                              decode: nil,
                              shouldInterpolate: true,
                              intent: CGColorRenderingIntent.defaultIntent)!

    // Do something with rgbImageRef, or for UIImage:
    let outputImage = UIImage(cgImage: rgbImageRef)

Затем я создаю CGImage со следующими параметрами и преобразую rgbImageRef в UIImage.Однако, когда я запускаю этот код, я просто получаю черное изображение с некоторыми белыми отметинами, которые выглядят как шум.

...