如何在UIImage中显示图像的一部分?

时间:2012-12-26 16:37:24

标签: iphone objective-c ios uiimageview uiimage

我有UIImageView我正在显示50x100图像。

我想只显示50x50图像的一部分(顶部)?

我该怎么做?

3 个答案:

答案 0 :(得分:13)

UIImageView 中移动大图像的非常简单的方法如下。

让我们得到大小(100,400)的图像,代表一个图像的4个状态,一个在另一个之下。我们想要显示尺寸为(100,100)的方形 UIImageView 中偏移Y = 100的第二张图片。 解决方案是:

UIImageView *iView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
CGRect contentFrame = CGRectMake(0, 0.25, 1, 0.25);
iView.layer.contentsRect = contentFrame;
iView.image = [UIImage imageNamed:@"NAME"];

此处 contentFrame 是相对于真实 UIImage 大小的规范化框架。 所以,“0”表示我们从左边界开始可见的图像部分, “0.25”表示我们有垂直偏移100, “1”表示我们要显示图像的全宽, 最后,“0.25”表示我们只想显示高度的1/4部分图像。

因此,在本地图像坐标中,我们显示以下框架

CGRect visibleAbsoluteFrame = CGRectMake(0*100, 0.25*400, 1*100, 0.25*400)
or CGRectMake(0, 100, 100, 100);

答案 1 :(得分:10)

你可以使用CGImageCreateWithImageInRect来裁剪图像,这是一个处理CGImageRef的Quartz原语,所以你会有类似的东西:

CGImageRef imageRef = CGImageCreateWithImageInRect(originalImage.CGImage, cropRect);
UIImage* outImage = [UIImage imageWithCGImage:imageRef scale:originalImage.scale orientation:originalImage.imageOrientation]]; 
CGImageRelease(imageRef);

在计算cropRect时,请记住它应以像素为单位,而不是以点数给出,即:

float scale = originalImage.scale;
CGRect cropRect = CGRectMake(0, 0,
                         originalImage.size.width * scale, originalImage.size.height * 0.5 * scale);

0.5因素说明了你只需要上半部分的事实。

如果您不想进入低级别,可以将图片添加到UIView作为背景颜色,并使用clipToBounds CALayer属性进行裁剪:

myView.backgroundColor = [UIColor colorWithBackgroundPattern:myImage];
myView.layer.clipToBounds = YES;

另外,相应地设置myView边界。

答案 2 :(得分:8)

我可能会为您提供解决方案。看看这是否有效。在Interface Builder中,有一个关于图像内容填充属性的选项。您可以将其设置为top-left。按照界面构建器中的图像 -

enter image description here

在此之后将UIImageView的大小设置为50x50并选中“clip-subviews”...