iOS CGContext 边缘未抗锯齿
iOS CGContext Edge isn't antialiased
我正在尝试绘制一个 15 度角的矩形,将两种颜色沿中心分开,但它们之间的线是像素化的。我尝试了不同的混合选项,但似乎无法弄清楚如何使它看起来干净。
This is what the header looks like now
有谁知道我怎样才能使它们之间的界限看起来干净?
if (!_backgroundImageView.image) {
CGFloat width = CGRectGetWidth(self.bounds);
CGFloat height = CGRectGetHeight(self.bounds);
CGFloat tWidth = 0.26794919243f/*tan(15 degrees)*/ * height;
UIGraphicsBeginImageContext(CGSizeMake(width, height));
CGContextRef context = UIGraphicsGetCurrentContext();
if (_color1) {
CGContextSetFillColorWithColor(context, _color1.CGColor);
CGContextMoveToPoint(context, 0, 0);
CGContextAddLineToPoint(context, 1.0f + RoundPixelValue((width + tWidth) / 2.0f), 0);
CGContextAddLineToPoint(context, 1.0f + RoundPixelValue((width - tWidth) / 2.0f), height);
CGContextAddLineToPoint(context, 0, height);
CGContextFillPath(context);
}
if (_color2) {
CGContextSetFillColorWithColor(context, _color2.CGColor);
CGContextMoveToPoint(context, width, 0);
CGContextAddLineToPoint(context, RoundPixelValue((width + tWidth) / 2.0f) - 1.0f, 0);
CGContextAddLineToPoint(context, RoundPixelValue((width - tWidth) / 2.0f) - 1.0f, height);
CGContextAddLineToPoint(context, width, height);
CGContextFillPath(context);
}
_backgroundImageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
这里的主要问题是您没有使用正确的比例创建上下文。
而不是使用 UIGraphicsBeginImageContext
使用 UIGraphicsBeginImageContextWithOptions
像这样:
UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), YES, 0);
将比例指定为 0 会将其设置为设备屏幕的比例因子。
这应该消除了大部分锯齿现象。
我正在尝试绘制一个 15 度角的矩形,将两种颜色沿中心分开,但它们之间的线是像素化的。我尝试了不同的混合选项,但似乎无法弄清楚如何使它看起来干净。
This is what the header looks like now
有谁知道我怎样才能使它们之间的界限看起来干净?
if (!_backgroundImageView.image) {
CGFloat width = CGRectGetWidth(self.bounds);
CGFloat height = CGRectGetHeight(self.bounds);
CGFloat tWidth = 0.26794919243f/*tan(15 degrees)*/ * height;
UIGraphicsBeginImageContext(CGSizeMake(width, height));
CGContextRef context = UIGraphicsGetCurrentContext();
if (_color1) {
CGContextSetFillColorWithColor(context, _color1.CGColor);
CGContextMoveToPoint(context, 0, 0);
CGContextAddLineToPoint(context, 1.0f + RoundPixelValue((width + tWidth) / 2.0f), 0);
CGContextAddLineToPoint(context, 1.0f + RoundPixelValue((width - tWidth) / 2.0f), height);
CGContextAddLineToPoint(context, 0, height);
CGContextFillPath(context);
}
if (_color2) {
CGContextSetFillColorWithColor(context, _color2.CGColor);
CGContextMoveToPoint(context, width, 0);
CGContextAddLineToPoint(context, RoundPixelValue((width + tWidth) / 2.0f) - 1.0f, 0);
CGContextAddLineToPoint(context, RoundPixelValue((width - tWidth) / 2.0f) - 1.0f, height);
CGContextAddLineToPoint(context, width, height);
CGContextFillPath(context);
}
_backgroundImageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
这里的主要问题是您没有使用正确的比例创建上下文。
而不是使用 UIGraphicsBeginImageContext
使用 UIGraphicsBeginImageContextWithOptions
像这样:
UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), YES, 0);
将比例指定为 0 会将其设置为设备屏幕的比例因子。
这应该消除了大部分锯齿现象。