【问题标题】:How to get coordinates of a view according to the coordinates of the uiimage on which it is placed in ios sdk?如何根据放置在ios sdk中的uiimage的坐标来获取视图的坐标?
【发布时间】:2012-08-12 21:31:39
【问题描述】:

我有一个应用程序,用户从相机拍摄照片并将其放置在全屏图像视图上。现在用户可以在其上查看矩形/正方形视图并将覆盖视图的坐标/大小发送到服务器。问题是我根据屏幕尺寸获取视图的坐标,但我希望尺寸应该根据 imageview 上的图像,因为通常来自相机的图像比屏幕具有更大的分辨率。

请提供一种方法来根据 uiimage 而不是屏幕获取覆盖视图的大小

编辑:例如:如果用户在图像中的人脸上绘制视图并将裁剪视图的坐标发送到服务器。那么如果坐标是根据屏幕而不是根据uiimage本身就很难与真实图像同步坐标

【问题讨论】:

  • 我想了解:您使用相机拍摄高分辨率图像并希望将调整大小(小)的图像发送到服务器?
  • @Sava :不,我想发送用户在屏幕上放置的视图(裁剪框)的坐标。同一图像的副本也在服务器上。例如,如果用户在图像中的人脸上绘制视图并将裁剪视图的坐标发送到服务器。那么如果坐标是根据屏幕而不是根据uiimage本身就很难与真实图像同步坐标
  • 在这种情况下,您需要发布绘制脸部矩形的代码,让我们看看您是如何做到的。我想问题就在那里
  • @Sava:我只是在屏幕上放置一个矩形 UIview。(作为 uiimageview 的子视图)然后用户可以像裁剪视图一样拖动或调整它,而不是将其 x、y 宽度、高度发送到服务器。
  • 我已经发布了答案并进行了一些编辑,看,现在它必须正常工作

标签: iphone ios4 uiimageview uiimage


【解决方案1】:

答案很简单:

你有你的 UIImageView 的框架和你绘制的正方形的框架(都相对于self.view

你只需要找到你的正方形的原点,相对于UIImageView

只需减去:

//get the frame of the square
CGRect *correctFrame = square.frame;

//edit square's origin
correctFrame.origin.x -= imageView.frame.origin.x;
correctFrame.origin.y -= imageView.frame.origin.y;

现在correctFrame 是相对于imageView 的正方形框架,而square.frame 仍然相对于self.view(因为我们没有更改它)

要根据图像分辨率获取帧,请执行与上述完全相同的操作,然后:

float xCoefficient = imageResolutionWidth / imageView.frame.size.width;
float yCoefficient = imageResolutionHeight / imageView.frame.size.height;

correctFrame.origin.x *= xCoefficient;
correctFrame.origin.y *= yCoefficient;
correctFrame.size.width *= xCoefficient;
correctFrame.size.height *= yCoefficient;

为什么:图像分辨率比 imageView.frame 高得多,所以你必须计算一个系数来调整你的正方形。

就是这样!

【讨论】:

  • 我想根据图像分辨率而不是图像视图来获得坐标。例如,如果我有一张分辨率为 (1100,1500) 的图像并且我绘制了一个全屏裁剪视图,那么根据 imageview,裁剪视图的坐标将为 (0,0 768,1024)。如果我发送 (0,0768, 1024)到服务器然后它会是错误的,因为我希望它是(1100,1500)否则结果将是错误的
  • 已修改,请看
  • 这是一个伟大的逻辑。它似乎像一个魅力一样工作。我将在实时条件下对其进行测试并报告.. 非常感谢。伟大的工作
  • 还有一个问题。我会将更改/修改的坐标发送到服务器并存储它们。但是用户可以选择查看他们以前的工作。所以在这种情况下,我将从服务器取回坐标并根据服务器存储的坐标创建预定义的视图。但是现在裁剪视图将被更改,因为我存储了修改后的坐标。有什么方法可以知道原始坐标,即正确的frame.xyx ??
  • 好吧,我可以将原始坐标和修改后的坐标都存储到服务器上,并将原始坐标用于将来的预览?但是可以用上面的算法来完成吗,但我认为我还必须将图像分辨率存储在服务器上
猜你喜欢
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多