У меня есть вывод из пользовательской модели 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.Однако, когда я запускаю этот код, я просто получаю черное изображение с некоторыми белыми отметинами, которые выглядят как шум.