0

简短版本:我如何知道 UIImageView 的哪个区域包含图像,而不是纵横比填充?

较长的版本:我有一个固定大小的 UIImageView,如图所示:

在此处输入图像描述

我正在将照片加载到此 UIViewController 中,并且我想保留原始照片的纵横比,因此我将 contentMode 设置为 Aspect Fit。这最终确保了整个照片都显示在 UIImageView 中,但具有添加一些填充(配置为红色)的副作用:

在此处输入图像描述

到目前为止没问题....但是现在我正在对原始图像进行人脸检测。人脸检测代码返回一个 CGRects 列表,然后我在 UIImageView 之上渲染(我有一个子类 UIView,然后在 IB 中布置一个与 UIImageView 大小和偏移相同的实例)。

当没有填充照片以适应 UIImageView 时,这种方法非常有效。但是,如果有填充,它会引入一些偏斜,如绿色所示:

在此处输入图像描述

渲染框时我需要考虑图像填充,但我看不到检索它的方法。

因为我知道原始图像大小和 UIImageView 大小,我可以做一些代数来计算填充应该在哪里。但是,似乎有一种方法可以检索此信息,而我忽略了它。

4

1 回答 1

0

我不经常使用图像视图,所以这可能不是最好的解决方案。但是由于没有其他人回答过这个问题,我想我会通过一个简单的数学解决方案来解决您的问题:

UIImage *selectedImage; // the image you want to display
UIImageView *imageView; // the imageview to hold the selectedImage

NSInteger heightOfView = imageView.frame.size.height;
NSInteger heightOfPicture = selectedImage.size.height;

NSInteger yStartingLocationForGreenSquare; // set it to whatever the current location is

// take whatever you had it set to and add the value of the top padding
yStartingLocationForGreenSquare += (heightOfView - heightOfPicture) / 2;

因此,尽管可能有其他解决方案,但这是一个非常简单的数学公式,可以完成您所需要的。希望能帮助到你。

于 2013-06-07T21:20:18.213 回答