获取 UIImageView 中 pan On UIImage 的像素位置

Posted

技术标签:

【中文标题】获取 UIImageView 中 pan On UIImage 的像素位置【英文标题】:Get the pixel position of pan On UIImage in a UIImageView 【发布时间】:2015-11-20 11:42:41 【问题描述】:

我需要实际的像素位置,而不是相对于 UIImageView 框架的位置,而是 UIImage 上的实际像素位置。

UIpangesture 识别器给出了 UIimageView 中的位置,所以它没有用。

我可以将 x 和 y 与比例相乘,但 UIImage 比例始终为 0。

我需要从 UIImage 中裁剪一个圆形区域,使其模糊并将其放置在同一位置

流程:

    使用以下方法从 UIimage 中裁剪圆形区域:g CGImageCreateWithImageInRect

    然后使用:[[UIBezierPath bezierPathWithRoundedRect:

    使用 CIGaussianBlur 模糊圆形矩形图像

    将圆形矩形模糊图像放在 x,y 位置

在第一步中,我需要用户点击的实际像素位置

【问题讨论】:

我面临同样的问题。我需要来自 UIImageViewPoint 的 UIImage Point 你能解决吗? @MikeAlter 那是很久以前的事了。但我认为我能够得到“将 x 和 y 与比例相乘”。我不记得怎么了。但是规模和乘法是我能够做到的。如果您得到解决方案,请告诉我。 感谢重播 Nil 这对我没有帮助,我的问题是我有 Scrollview + Zoom + Rotate 。 ***.com/q/45854149/4601900 这是我发布的问题。但没有答案! 【参考方案1】:

这取决于图像查看内容模式。

对于比例填充模式,您只需将坐标乘以图像与视图的比率:

CGPoint pointOnImage = CGPointMake(pointOfTouch.x*(imageSize.width/frameSize.width), pointOfTouch.y*(imageSize.height/frameSize.height));

对于所有其他模式,您需要计算视图内的实际图像帧,然后有不同的过程。

从 cmets 添加方面适应模式:

为了适合方面,您需要计算实际的图像帧,该帧可以小于其中一个维度的图像视图帧并放置在中心:

    CGSize imageSize; // the original image size
    CGSize imageViewSize; // the image view size

    CGFloat imageRatio = imageSize.width/imageSize.height;
    CGFloat viewRatio = imageViewSize.width/imageViewSize.height;

    CGRect imageFrame = CGRectMake(.0f, .0f, imageViewSize.width, imageViewSize.height);

    if(imageRatio > viewRatio) 
        // image has room on top and bottom but fits perfectly on left and right
        CGSize displayedImageSize = CGSizeMake(imageViewSize.width, imageViewSize.width / imageRatio);
        imageFrame = CGRectMake(.0f, (imageViewSize.height-displayedImageSize.height)*.5f, displayedImageSize.width, displayedImageSize.height);
    
    else if(imageRatio < viewRatio) 
        // image has room on left and right but fits perfectly on top and bottom
        CGSize displayedImageSize = CGSizeMake(imageViewSize.height * imageRatio, imageViewSize.height);
        imageFrame = CGRectMake((imageViewSize.width-displayedImageSize.width)*.5f, .0f, displayedImageSize.width, displayedImageSize.height);
    

    // transform the coordinate
    CGPoint locationInImageView; // received from touch

    CGPoint locationOnImage = CGPointMake(locationInImageView.x, locationInImageView.y); // copy the original point
    locationOnImage = CGPointMake(locationOnImage.x - imageFrame.origin.x, locationOnImage.y - imageFrame.origin.y); // translate to fix the origin
    locationOnImage = CGPointMake(locationOnImage.x/imageFrame.size.width, locationOnImage.y/imageFrame.size.height); // transform to relative coordinates
    locationOnImage = CGPointMake(locationOnImage.x*imageSize.width, locationOnImage.y*imageSize.height); // scale to original image coordinates

如果您想转移到方面填充,请注意,您只需在两个 if 语句中交换 &lt;&gt;

【讨论】:

试试我添加的代码。我没有尝试过,所以我希望它能正常工作,否则请回复我。还可以尝试编辑您的评论,因为您已经写了“fir”。 是的!这是您需要的代码!!

以上是关于获取 UIImageView 中 pan On UIImage 的像素位置的主要内容,如果未能解决你的问题,请参考以下文章

使用 Afnetworking 获取 UIImageView 并将其放入数组中

UIImageView 中奇怪的对齐行为

如何在 UITableViewCell 中获取 UIImageview 的屏幕位置

如何在 UIScrollView 中获取 UIImageView 的位置并只允许平移它?

如何在 UICollectionView 单元格中获取 UIImageView 的帧大小

iOS 为 UIImageView 获取图像的可见部分