能否使用UIImage函数将双精度数组转换为UIImage?
UIImage函数需要一个字符串作为参数。我尝试将数组中的每个元素转换为字符串,整个数组也转换为字符串,但结果为空值。请问有人能帮忙吗?
[编辑:]
似乎我没有清楚表达我的问题。为了更明确,我正在开发一款软件,从数学表达式中裁剪数字和操作符,并逐个显示所有块。现在,在Swift中应该如何处理呢?
步骤1:我有一个灰度图像。我使用UIImage函数读取它。我按照以下方式将其转换为自定义RGBA函数,这样我就可以像在MATLAB、Python或C++中那样处理像素级别的内容。该函数受到许多网站建议使用的启示。
var ImageDouble = [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]
UIImage函数需要一个字符串作为参数。我尝试将数组中的每个元素转换为字符串,整个数组也转换为字符串,但结果为空值。请问有人能帮忙吗?
[编辑:]
似乎我没有清楚表达我的问题。为了更明确,我正在开发一款软件,从数学表达式中裁剪数字和操作符,并逐个显示所有块。现在,在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
}
步骤二:我选择图像的一个通道进行处理 [红色通道:无论选择哪个通道,因为所有通道的输出都相同],并应用我的自定义中值滤波器,核大小为5x5。
步骤三:接下来,我使用Nibblack方法对图像进行二值化处理,其中我使用了平均滤波器和标准差。
步骤四:之后,我使用连通组件标记算法将图像的不同连通组件分离出来。
步骤五:最后,我需要裁剪标记的图像并调整大小。对于从原始图像中裁剪,我使用智能定位算法确定位置。对于调整大小,我想使用Core Graphics调整大小滤镜。然而,为此我需要将当前输出 [一个二维数组或扁平化数组,类型为 Array<Double>
或 Array<Int>
] 转换为 UIImage 或 CGImage。
这是我的真正问题:如何从类型为 Array<Double>
或 Array<Int>
的二维数组或扁平化数组转换为 UIImage 或 CGImage?