Я пытаюсь нарисовать путь на изображении с высоким разрешением, это ничего сложного для iPhone, но если я добавлю тень на свой путь, все будет отставать. Он отстает только при работе с изображениями с определенным разрешением (2000 x 3000) даже меньше.
В Раскадровка соперничает являются:
Как редактировать изображения с высоким разрешением с помощью Core Graphics?
-Scroll View
-Image View
-Draw View
Так у меня есть DrawingView на вершине ImageView, когда мне нужно сделать.
Таким образом, ImageView и DrawView (view.bounds.size
) имеют то же разрешение, что и изображение (например, 2000 x 3000) (есть проблема).
Я рисую изображение с высоким разрешением.
Я непосредственно не вызывая drawRect:
но только вызывая setNeedsDisplay()
внутри touchesBegan()
и touchesMoved()
после выполнения некоторых операций (path.moveToPoint
, path.addCurveToPoint
, операции массива) и добавления точек в мой массив.
В drawRect:
я по существу есть:
override func drawRect(rect: CGRect) {
print(self.bounds.size)
UIColor.greenColor().setStroke()
path.lineCapStyle = .Round
path.lineJoinStyle = .Round
path.lineWidth = 60.0
context = UIGraphicsGetCurrentContext()!
CGContextAddPath(context, path.CGPath)
CGContextSetShadowWithColor(context, CGSizeZero, 14.0, UIColor.whiteColor().CGColor) // <-- with this shadow it lags a lot.
path.stroke()
}
Мой путь является UIBezierPath()
.
Любые идеи для улучшения скорости?
Обновление: Я следил за тем, что сказал @brimstone. Теперь у меня есть ImageView с более низким разрешением, но я должен применить свой рисованный путь к изображению с высоким разрешением.
(я пытаюсь передать обрезать изображение с путем, который черпает пользователь)
В этом коде я уже получил свой закрытый путь:
let layer = CAShapeLayer()
layer.path = path.CGPath
self.imageToEditView.layer.mask = layer
UIGraphicsBeginImageContext(self.imageEdited.size)
self.imageToEditView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let croppedCGImage = CGImageCreateWithImageInRect(image.CGImage!, CGPathGetBoundingBox(path.CGPath))
let croppedImage = UIImage(CGImage: croppedCGImage!)
self.imageToEditView.image = croppedImage
self.imageToEditView.layer.mask = nil
imageToEditView.bounds.size
= низкое разрешение
imageEdited.size
= высокое разрешение
Мне нужно установить разрешение высоты (я думаю), когда i renderInContext
. Но как я могу изменить разрешение imageView сейчас?
Спасибо за ответ, я проверю пятницу. Смогу ли я применить содержимое моего рисунка от маленького разрешения до более высокого? – Danny182
Если ваш drawView отделен от вашего изображения, вы можете привлечь пользователя, а затем применить то, что они нарисовали к изображению с высоким разрешением. Это не имеет значения для изображения с низким разрешением, если это просто на фоне их рисования. – brimstone
У меня возникли проблемы с применением пути к изображению с высоким разрешением. Я обновил ответ – Danny182