iOS - Рисование прямоугольников (CGRect) на UIImage в Swift работает некорректно - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь нарисовать прямоугольники (массив CGRects) на изображении UIImage, которое будет возвращено конечному пользователю.Конечный результат, из-за отсутствия лучшей фразы, выглядит странно.Например, если у меня есть массив из 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
}

Массив CGRect ("вхождения" из функциивыше) со значением «[(298.0, 868.0, 65.0, 43.0), (464.0, 1017.0, 67.0, 36.0)]» приводит к изображению ниже: Screenshot of UIImage

Дополнительные сведения: с помощью Swift 4,iOS 12

Спасибо!

1 Ответ

0 голосов
/ 14 ноября 2018

Код правильный.

"[(298,0, 868,0, 65,0, 43,0), (464,0, 1017,0, 67,0, 36,0)]"

Неправильные координаты.

Пожалуйста, примите во внимание резолюции iPhone.

image


img

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")!)

источник

...