我正在将UIImageView与contentMode:UIViewContentModeScaleAspectFill一起使用,其中包含的图像无法完全填充UIImageView。
例如,UIImageView的大小为:width = 480; height = 180,但是里面的图像只有以下大小:width = 320; height = 180。因此,在80的左侧和右侧都有明显的边距。
我创建了此函数,以使用第一个1x180px rect模式填充这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的转换还是其他地方?
最佳答案
我自己找到了答案。
问题出在源图像中。似乎第一个1px与其余的略有不同...
更改此行有效:
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], CGRectMake(5, 0, 1, image.size.height));
基本上离开一个5px的安全区域;),然后取1px ...