2

我正在使用带有 contentMode:UIViewContentModeScaleAspectFill 的 UIImageView,其中包含不完全填充 UIImageView 的图像。

例如 UIImageView 的尺寸为:width=480;height=180 但里面的图像只有尺寸:width=320;height=180。因此 80 的左右两侧有明显的余量。

我创建了这个函数来用第一个 1x180px 矩形的图案填充这些 80px:

- (UIImage *)repeatEdgesForImage:(UIImage *)image withDesiredSize:(CGSize)size {

UIImage *result = nil;

double ratio = image.size.height / size.height;
int width = size.width * ratio;

UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, image.size.height), NO, 0.0);

CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], CGRectMake(0, 0, 1, image.size.height));
UIImage *fillImg = [UIImage imageWithCGImage:imageRef];
[fillImg drawAsPatternInRect:CGRectMake(0, 0, width, image.size.height)];

int offset = (width - image.size.width) / 2;
[image drawAtPoint:CGPointMake(offset, 0) blendMode:kCGBlendModeNormal alpha:1.0];

result = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return result; }

它工作正常,但结果不是很完美,因为颜色略有不同:

在此处输入图像描述

如您所见,左侧和右侧的颜色略有不同。我不确定这是来自 UIImage 到 CGImage 的转换还是来自其他地方?

4

1 回答 1

0

我自己找到了答案。

问题出在源图像中。似乎前 1px 与其余的略有不同......

更改此行有效:

CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], CGRectMake(5, 0, 1, image.size.height));

基本上留下一个 5px 的安全区 ;) 然后取 1px ...

于 2013-04-29T19:35:51.857 回答