Я хочу, чтобы иметь возможность рисовать линию над фотографией высокого разрешения (например, 8-мегапиксельное изображение) в определенном месте.Нарисуйте форму поверх изображения с высоким разрешением?
Это довольно простая вещь, и есть много сообщений об этом, но моя проблема в том, что CGontext «пространство рисования» не похоже на изображение с высоким разрешением.
Я могу нарисовать линию и сохранить изображение, но моя проблема заключается в рисовании линии в определенном месте. Мои координатные пространства кажутся разными. Я думаю, что должен быть масштабный фактор, который мне не хватает, или мое понимание просто испортилось.
Так что мой вопрос:
Как нарисовать на образа, то есть «аспект подходит» к экрану (но гораздо более высокое разрешение) и иметь рисунок (в этом случае линия) будет в том же положении на экране и окончательном полном разрешенном изображении?
Красная линия является линией Я рисую. Он должен перейти от центра начальной цели (центр) к центру конечной цели (theEnd).
Я упростил функцию рисования вниз для публикации здесь, но я подозреваю, что это все мое мышление/подход, который является неправильным.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var theTarget: UIImageView!
@IBOutlet weak var theEnd: UIImageView!
var lineColor = UIColor.redColor()
var targetPos : CGPoint!
var endPos : CGPoint!
var originalImage : UIImage!
override func viewDidLoad() {
super.viewDidLoad()
imageView.image = UIImage(named: "reference.jpg")
originalImage = imageView.image
drawTheLine()
}
func drawTheLine() {
UIGraphicsBeginImageContext(originalImage!.size);
// Draw the original image as the background
originalImage?.drawAtPoint(CGPointMake(0, 0))
// Pass 2: Draw the line on top of original image
let context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 10.0);
targetPos = theTarget.frame.origin
endPos = theEnd.frame.origin
CGContextMoveToPoint(context, targetPos.x, targetPos.y);
CGContextAddLineToPoint(context, endPos.x, endPos.y)
CGContextSetStrokeColorWithColor(context, lineColor.CGColor)
CGContextStrokePath(context);
imageView.image = UIGraphicsGetImageFromCurrentImageContext()
}
@IBAction func saveButton(sender: AnyObject) {
// Create new image
let newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(newImage!, nil, nil, nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func handlePan(recognizer:UIPanGestureRecognizer) {
let translation = recognizer.translationInView(self.view)
if let view = recognizer.view {
view.center = CGPoint(x:view.center.x + translation.x,
y:view.center.y + translation.y)
}
recognizer.setTranslation(CGPointZero, inView: self.view)
//redraw the line
drawTheLine()
print("the start pos of the line is: ", theTarget.frame.origin, " and end pos is: ", theEnd.frame.origin)
}
}
Можете ли вы показать нам скриншот вывода изображения, и, возможно, один с ожидаемым выходом? У меня может быть ответ за вас. –
Добавлено :) Надеюсь, это имеет смысл. – BRich