gpt4 book ai didi

ios - 快速将 double 组转换为 UIImage

转载 作者:可可西里 更新时间:2023-11-01 02:17:12 25 4
gpt4 key购买 nike

是否可以使用 UIImage 函数将 double 组转换为 UIImage?

var ImageDouble = [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]

UIImage 函数要求字符串。我尝试将单个元素上的数组转换为字符串,然后将整个数组转换为字符串,结果为空。有人可以帮忙吗?

[编辑:]

看来我对我的问题不是很清楚。为了说得更清楚,我正在开发一种软​​件,它可以从数学表达式中裁剪数字和运算符,并一个一个地向我展示所有的 block 。现在,我该如何在 Swift 中处理它? :

第 1 步:我提供了一张灰度图像。我使用 UIImage 函数读取它。我将其转换为自定义 RGBA 函数,如下所示,以便我可以像在 MATLAB、Python 或 C++ 中那样处理像素级别。该功能的灵感来自许多网站的使用建议。

struct Pixel {
var value: UInt32
var red: UInt8 {
get { return UInt8(value & 0xFF) }
set { value = UInt32(newValue) | (value & 0xFFFFFF00) }
}
var green: UInt8 {
get { return UInt8((value >> 8) & 0xFF) }
set { value = (UInt32(newValue) << 8) | (value & 0xFFFF00FF) }
}
var blue: UInt8 {
get { return UInt8((value >> 16) & 0xFF) }
set { value = (UInt32(newValue) << 16) | (value & 0xFF00FFFF) }
}
var alpha: UInt8 {
get { return UInt8((value >> 24) & 0xFF) }
set { value = (UInt32(newValue) << 24) | (value & 0x00FFFFFF) }
}

struct RGBA {
var pixels: UnsafeMutableBufferPointer<Pixel>
var width: Int
var height: Int
init?(image: UIImage) {
guard let cgImage = image.CGImage else { return nil }
width = Int(image.size.width)
height = Int(image.size.height)
let bitsPerComponent = 8
let bytesPerPixel = 4
let bytesPerRow = width * bytesPerPixel
let imageData = UnsafeMutablePointer<Pixel>.alloc(width * height)
let colorSpace = CGColorSpaceCreateDeviceRGB()
var bitmapInfo: UInt32 = CGBitmapInfo.ByteOrder32Big.rawValue
bitmapInfo |= CGImageAlphaInfo.PremultipliedLast.rawValue & CGBitmapInfo.AlphaInfoMask.rawValue
guard let imageContext = CGBitmapContextCreate(imageData, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo) else { return nil }
CGContextDrawImage(imageContext, CGRect(origin: CGPointZero, size: image.size), cgImage)
pixels = UnsafeMutableBufferPointer<Pixel>(start: imageData, count: width * height)
}

func toUIImage() -> UIImage? {
let bitsPerComponent = 8
let bytesPerPixel = 4
let bytesPerRow = width * bytesPerPixel
let colorSpace = CGColorSpaceCreateDeviceRGB()
var bitmapInfo: UInt32 = CGBitmapInfo.ByteOrder32Big.rawValue
bitmapInfo |= CGImageAlphaInfo.PremultipliedLast.rawValue & CGBitmapInfo.AlphaInfoMask.rawValue
let imageContext = CGBitmapContextCreateWithData(pixels.baseAddress, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo, nil, nil)
guard let cgImage = CGBitmapContextCreateImage(imageContext) else {return nil}
let image = UIImage(CGImage: cgImage)
return image
}

第 2 步:现在我采用图像的一个 channel [红色:我采用哪个 channel 并不重要,因为所有 channel 都具有相同的输出] 并应用我自定义的内核大小为 5x5 的中值滤波器。

第 3 步:接下来,我使用 Nibblack 近似对图像进行二值化,其中我使用了平均滤波器和标准差。

第四步:之后,我使用连接组件标记来分离图像的不同连接组件。

第 5 步:最后,我需要裁剪带标签的图像并调整其大小。对于从原始图像裁剪,我通过使用智能定位算法知道位置。为了调整大小,我想使用 Core Graphics Resizing 过滤器。但是,为此我需要将当前输出 [二维数组或展平] 转换为 UIImage 或 CGImage。

这是我真正的问题:如何从类型为 Array<Double> 的二维数组或展平数组转换为 UIImage 或 CGImage或 Array<Int>

最佳答案

试试这个:

var ImageDouble = [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]
let images = ImageDouble.map{ UIImage(named: "\($0)")}

map 函数会将您的数组转换为另一个数组。

关于ios - 快速将 double 组转换为 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36393436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com