我必须在Swift中绘制一个瀑布图,我使用的是位图上下文,它的更新速度非常快,大约每秒20行,所有我有大约400行显示 - 全宽。
目前我的CPU负载大约是100%,我想知道,如果有更好的方法,那么可以降低CPU负载。
func draw2(pixel:[rgba],width:Int,height:Int) -> UIImage
{ let colorSpace = CGColorSpaceCreateDeviceRGB()
var data = UnsafeMutableRawPointer(mutating: pixel)
let bitmapContext = CGContext(data: data,
width: width,
height: height,
bitsPerComponent: 8,
bytesPerRow: 4*width,
space: colorSpace,
bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue)
let image = bitmapContext?.makeImage()
return UIImage(cgImage: image!)
}
非常感谢你的共同点
答案 0 :(得分:0)
根据您的说法,您应该能够缓存图像,并且每次只能绘制增量线。您需要保留一个类参数来存储您的图像:
var cachedImage : UIImage?
每次调用绘图功能时,请执行以下操作:
使用UIImage.draw(in:CGRect)绘制缓存的图像(如果它存在,在第一次运行时它当然不会)(参见https://developer.apple.com/documentation/uikit/uiimage/1624092-draw)。
绘制新路径。
将结果保存回cachedImage。
在每次绘制迭代时,您显然希望将矩形移动一个像素,并初始化上下文以为新行腾出空间。
希望有所帮助。