我发现的所有iOS绘图信息都与如何在视图中显示内容有关。特别是在视图中分层不同的图像,视图或路径以在屏幕上显示。我无法找到关于如何实际操纵UIImage本身的信息。
具体来说,我希望打开一个图像文件作为UIImage(已经知道如何做到这一点),在该图像中画一条线,然后将新的UIImage保存到文件中(已经知道怎么做了)这也是)。我认为有一个相当简单的方法可以做到这一点,但我找到的每个解决方案似乎都进入了一个复杂的解决方案,这似乎有点过分,因为我认为这将是一个小任务。我怎么能这么做呢?或者是更复杂的解决方案必要的方式?
我猜测类似于此的事情之前已经得到了解答,但我在该领域缺乏知识似乎使得难以正确搜索并找到这些答案。
答案 0 :(得分:1)
来自&坐标是图像像素单位
func drawLineOnImage(size: CGSize, image: UIImage, from: CGPoint, to: CGPoint) -> UIImage {
UIGraphicsBeginImageContext(size)
image.drawAtPoint(CGPointZero)
let context = UIGraphicsGetCurrentContext()
CGContextSetLineWidth(context, 1.0)
CGContextSetStrokeColorWithColor(context, UIColor.blueColor().CGColor)
CGContextMoveToPoint(context, from.x, from.y)
CGContextAddLineToPoint(context, to.x, to.y)
CGContextStrokePath(context)
let resultImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return resultImage
}
你可以使用Objective-c回答Here
答案 1 :(得分:1)
根据Nadeesha Lakmal的回答更新了Swift 4
func drawLineOnImage(size: CGSize, image: UIImage, from: CGPoint, to: CGPoint) -> UIImage {
UIGraphicsBeginImageContext(size)
image.draw(at: CGPoint.zero)
guard let context = UIGraphicsGetCurrentContext() else { return UIImage() }
context.setLineWidth(1.0)
context.setStrokeColor(UIColor.blue.cgColor)
let startPoint = CGPoint(x: from.x, y: from.y)
let endPoint = CGPoint(x: to.x, y: to.y)
context.move(to: startPoint)
context.addLine(to: endPoint)
context.strokePath()
guard let resultImage = UIGraphicsGetImageFromCurrentImageContext() else { return UIImage() }
UIGraphicsEndImageContext()
return resultImage
}