gpt4 book ai didi

ios - 在 UIImage 上绘制另一个图像 -

转载 作者:搜寻专家 更新时间:2023-11-01 07:01:50 25 4
gpt4 key购买 nike

我正在尝试实现在 UIImageView 的特定点绘制图像的功能。

1.) 所以用户拍了一张照片2.) 照片在“Aspect Fit”中的 UIImageView 中显示给用户3.) 用户点击 UIImageView 以在点击点放置图像4.) 显示组合图像

代码:

extension UIImage {
func image(byDrawingImage image: UIImage, inRect rect: CGRect) -> UIImage! {
UIGraphicsBeginImageContextWithOptions(size, false, 0)
draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
image.draw(in: rect)
let result = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return result
}}

source

    @IBAction func imageTapped(_ sender: UITapGestureRecognizer) {


let pointTapped = sender.location(in: imageDIsplay)

imageDIsplay.image = originalImage?.image(byDrawingImage: #imageLiteral(resourceName: "checkmark.png"), inRect: CGRect(x: originalImage!.size.width / imageDIsplay.frame.width * pointTapped.x, y: originalImage!.size.height / imageDIsplay.frame.height * pointTapped.y, width: 100, height: 100))

}

我的问题:“复选标记图像”从来没有出现在我点击的确切位置。

我尝试了很多而不是 originalImage!.size.width/imageDIsplay.frame.width 以获得更好的比例,包括 CGRect AVMakeRectWithAspectRatioInsideRect(CGSize aspectRatio, CGRect boundingRect);。但没有什么能正常工作。

我错过了什么?

谢谢!莎拉

最佳答案

您绝对是在正确的轨道上。手头有一个可用的 utility 会很有用当图像以“纵横比”内容模式显示时,将 ImageView 边界中的点转换为图像边界中的点:

extension UIImageView {
func convertPointToImageCoordinates(_ p:CGPoint) -> CGPoint {
switch self.contentMode {
case .scaleAspectFit:
let r = AVMakeRect(
aspectRatio: self.image!.size, insideRect: self.bounds)
let scale = self.image!.size.width / r.width
var p2 = CGPoint(x: p.x - r.minX, y: p.y - r.minY)
p2 = CGPoint(x: p2.x * scale, y: p2.y * scale)
return p2
default:
fatalError("not written")
}
}
}

现在您可以获得相对于原始图像的点击坐标,因此您可以决定相对于该位置放置复选标记图像的位置。

关于ios - 在 UIImage 上绘制另一个图像 -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50785064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com