美文网首页
图像处理踩坑

图像处理踩坑

作者: 优雨 | 来源:发表于2018-08-06 14:26 被阅读18次

1.平铺图片

项目里有需要平铺图片作为背景处理的情况,常用的平铺方式有两种

  • 使用colorWithPatternImage
UIImageView *testIV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, Screen_Width, Screen_Height)];
UIImage *testImage = [UIImage imageNamed:@"starBg"];
testIV.backgroundColor = [UIColor colorWithPatternImage:testImage];
  • 使用resizableImageWithCapInsets:resizingMode:
UIImageView *testIV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, Screen_Width, Screen_Height)];
UIImage *testImage = [UIImage imageNamed:@"starBg"];
UIImage *resizableImage = [testImage resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeTile];
testIV.image = resizableImage;

2.Quartz2D绘制图片反转问题

直接使用CGContextDrawImage会使绘制的图片存在上下颠倒的问题,这是由于Quartz2D的坐标系原点在左下角造成的(从左下角开始,往上为Y轴正方向,往右为X轴正方向)。原本从左上角开始绘制的图片,会从左下角开始绘制,因此上下会颠倒。

CGSize imageSize = CGSizeMake(97, 97);
CGRect rect = { CGPointZero, imageSize };
UIImage *image = [UIImage imageNamed:@"NotificationAlert"];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:rect];
UIGraphicsBeginImageContext(imageSize);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, rect, image.CGImage);
UIImage *drawImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
imageView.image = drawImage;
[self.view addSubview:imageView];
reverse.png

正确的做法是在绘制前,变换坐标系,使其变为我们使用的frame的坐标系。

CGContextTranslateCTM(context, 0, imageSize.height);// 上移坐标系
CGContextScaleCTM(context, 1.0, -1.0);// 反转Y轴
normal.png

相关文章

网友评论

      本文标题:图像处理踩坑

      本文链接:https://www.haomeiwen.com/subject/nsbwvftx.html