我正在开展一个项目,我需要点击图片创建一个封闭的UIBezierPath。 在路径关闭后,我在路径中绘制一个模式。 使用底部的滑块,我可以设置将填充路径的图案的缩放级别。 我现在正致力于模式的透视变形,但我无法得到它。
模式就像这样创建
UIImage *originalImage = [UIImage imageNamed:@"tegole.jpg"];
UIImage *scaledImage = [UIImage imageWithCGImage:[originalImage CGImage]
scale:(originalImage.scale * _zoom)
orientation:(originalImage.imageOrientation)];
UIColor *patternImage = [UIColor colorWithPatternImage:scaledImage];
[patternImage setFill];
[_path fill];
有没有人对什么是更好的方法有任何建议? 我在看opencv.framework?这可能是一个解决方案吗?
答案 0 :(得分:0)
最近我一直在做类似的事情,但是我使用的是NSBezierPath而不是UIBezierPath ...尽管它们应该等效。我想用位图图像填充六边形的内部。我正在编写带有六角形瓷砖的电脑棋盘游戏。
我创建了一个六边形的路径,如下所示:
let path = NSBezierPath()
let rads = CGFloat(Double.pi) / 180.0
var p = NSPoint(x: scale*cos(30 * rads) + x, y: scale*sin(30 * rads) + y)
path.move(to: p)
p = NSPoint(x: scale*cos(90 * rads) + x, y: scale*sin(90 * rads) + y)
path.line(to: p)
p = NSPoint(x: scale*cos(150 * rads) + x, y: scale*sin(150 * rads) + y)
path.line(to: p)
p = NSPoint(x: scale*cos(210 * rads) + x, y: scale*sin(210 * rads) + y)
path.line(to: p)
p = NSPoint(x: scale*cos(270 * rads) + x, y: scale*sin(270 * rads) + y)
path.line(to: p)
p = NSPoint(x: scale*cos(330 * rads) + x, y: scale*sin(330 * rads) + y)
path.line(to: p)
p = NSPoint(x: scale*cos(30 * rads) + x, y: scale*sin(30 * rads) + y)
path.line(to: p)
path.lineWidth = 3.5
...然后我简单地添加:
path.setClip()
let mainBundle: Bundle = Bundle.main
imagePath = mainBundle.pathForImageResource("Swatch1.png")!
let gSwatch1 = NSImage(contentsOfFile:imagePath)!
gSwatch1.draw(in: path.bounds)
...这将在六边形路径的边界内绘制图像“ Swatch1.png”。
您可以通过更改目标的边界Rect来缩放图像,但也可以使用NSAffineTransform等来应用任何其他变换。