【问题标题】:iOS - Drawing Rectangles (CGRect) on UIImage in Swift not working correctlyiOS - 在 Swift 中的 UIImage 上绘制矩形 (CGRect) 无法正常工作
【发布时间】:2018-11-14 06:46:59
【问题描述】:

我正在尝试在 UIImage 上绘制矩形(CGRects 数组),并将其呈现给最终用户。 最后的结果,因为没有更好的短语,看起来很奇怪。例如,如果我有一个包含 2 个 CGRect 的数组,则仅绘制一个,勉强完成,但不完全完成。另一个被省略。请参阅下图,了解图像如何使用特定的 CGRect 数组生成。 (仅供参考:我将图像发送到 Google Cloud 进行处理,它以 CGRects 数组响应)

我错过了什么?

private func drawOccurrencesOnImage(_ occurrences: [CGRect], _ image: UIImage) -> UIImage? {
    let imageSize = image.size
    let scale: CGFloat = 0.0
    UIGraphicsBeginImageContextWithOptions(imageSize, false, scale)

    image.draw(at: CGPoint.zero)
    let ctx = UIGraphicsGetCurrentContext()

    ctx?.addRects(occurrences)
    ctx?.setStrokeColor(UIColor.red.cgColor)
    ctx?.setLineWidth(2.0)
    ctx?.strokePath()

    guard let drawnImage = UIGraphicsGetImageFromCurrentImageContext() else {
        presentAlert(alertTitle: "Error", alertText: "There was an issue, please try again")
        return nil
    }

    UIGraphicsEndImageContext()
    return drawnImage
}

值为“[(298.0, 868.0, 65.0, 43.0), (464.0, 1017.0, 67.0, 36.0)]" 的 CGRect 数组(上述函数中的“出现次数”)会产生下图:

更多细节:使用 Swift 4、iOS 12

谢谢!

【问题讨论】:

  • 我完全使用了您的代码,但使用了其他矩形。它工作得很好。看来,您的矩形中的 x 和 y 太大了。你能仔细检查一下吗?也许你需要以某种方式调整矩形。
  • 嗨@Evgeniy - 感谢您的评论!你能提供你在完美工作的地方使用的其他矩形吗?会超级有帮助的。 & 你在什么手机上测试?非常感谢。
  • 我在 XS 模拟器上进行测试。我测试了 CGRect(x: 10, y: 10, width: 100, height: 100) 和 CGRect(x: 150, y: 150, width: 100, height: 100)
  • 太好了 - 谢谢。

标签: ios swift uiimage drawrect cgrect


【解决方案1】:

代码是对的。

"[(298.0, 868.0, 65.0, 43.0), (464.0, 1017.0, 67.0, 36.0)]"

坐标不正确。

请考虑 iPhone 分辨率。


imageView.image = drawOccurrencesOnImage([CGRect(x: 100, y: 100, width: 59, height: 60), CGRect(x: 120, y: 50, width: 59, height: 60)], UIImage(named: "person-placeholder")!)

source

【讨论】:

  • dengApro 感谢您的回复 - 很高兴知道。那么,看起来每个 CGRect 的前 2 个数字(x 和 y)是“越界”吗?这就是关于坐标的“不恰当”吗? (即宽度和高度都可以吗?)嗯,我想知道为什么,然后,在我发送的屏幕截图中,实际上我画了一个小东西,我圈了 - 你对此有何看法?
  • 您的矩形中的 x 和 y 太大。同意@Evgeniy
  • 经过进一步研究,我的绘图一团糟的原因是我将 JPEG/HEIC 图像发送到 Google Cloud Vision API 进行处理,这在绘制矩形时不起作用。但是,如果我使用 SCREENSHOT (PNG),然后绘制矩形,则效果很好。现在我正在寻找一种以某种方式将 UIImages 转换为 PNG、屏幕截图或其他东西的方法......:/
  • 您正在处理摄影(.HEIC)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多