UIImageView内容像素(ingore图像填充)

时间:2013-06-07 20:49:44

标签: iphone ios ipad uiimageview uiimage

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

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

enter image description here

我正在将照片加载到这个UIViewController中,我想保留原始照片的宽高比,所以我将contentMode设置为Aspect Fit。这最终确保整个照片显示在UIImageView中,但副作用是添加一些填充(配置为红色):

enter image description here

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

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

enter image description here

我需要在渲染框时考虑图像填充,但我没有找到检索它的方法。

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

1 个答案:

答案 0 :(得分: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;

因此,虽然可能有其他解决方案,但这是一个非常简单的数学公式,可以满足您的需求。希望它有所帮助。