私は高解像度の画像にパスを描こうとしていますが、それはiPhoneのためには複雑なことではありませんが、私のパスに影を付けるとすべてが遅れます。それは私が特定の解像度(2000 x 3000)の画像で作業する場合にのみ遅れます。
ストーリーボード VIEは、以下のとおりです。私は描画する必要がある場合Core Graphicsで高解像度画像を編集するには?
-Scroll View
-Image View
-Draw View
は、だから私はImageViewの上にDrawingViewを持っています。
ImageViewとDrawView(view.bounds.size
)は、画像と同じ解像度(例えば、2000 x 3000)(に問題があります。)です。
私は高解像度のビューを描画しています。
私はが直接drawRect:
を呼び出すだけでいくつかの操作(path.moveToPoint
、path.addCurveToPoint
、配列操作)を行うと、私の配列にポイントを追加した後touchesBegan()
内部setNeedsDisplay()
とtouchesMoved()
を呼び出していませんよ。 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()
です。
スピードを上げるためのアイデアはありますか?
更新: @ブリムストンの説明に従った。 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
=高解像度 :
は、私はすでに私のクローズパスを持ってこのコードで
(私は、ユーザーが描くパスで画像をトリミング手にしようとしています)
私はrenderInContext
のときに高解像度を設定する必要があります(私は思う)。しかし、どうすればimageViewの解像度を変更できますか?
https://developer.apple.com/library/ios/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/SupportingHiResScreensInViews/SupportingHiResScreensInViews.htmlが答えてくれてありがとう、私は金曜日にそれをチェックします。小さな解像度から高い解像度への私の描かれた内容を適用することができますか? – Danny182
あなたのdrawViewがイメージビューとは別のものである場合は、ユーザーに何かを描画させ、描画したものを高解像度イメージに適用させることができます。低解像度画像については、それが背景にある場合は重要ではありません。 – brimstone
高解像度画像にパスを適用する際に問題が発生します。私は答えを更新した – Danny182