在 iOS 中,如何在没有抗锯齿/插值的情况下绘制位图?
Posted
技术标签:
【中文标题】在 iOS 中,如何在没有抗锯齿/插值的情况下绘制位图?【英文标题】:How do I draw into a bitmap without antialiasing/interpolation in iOS? 【发布时间】:2013-05-14 20:16:40 【问题描述】:我正在尝试像这样以编程方式绘制到 UIImage 中:
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIGraphicsBeginImageContextWithOptions(CGSizeMake(2, 2), YES, 1);
CGContextRef context = UIGraphicsGetCurrentContext();
// These three lines of code apparently do nothing.
CGContextSetInterpolationQuality(context, kCGInterpolationNone);
CGContextSetAllowsAntialiasing(context, false);
CGContextSetShouldAntialias(context, false);
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:1 green:0 blue:0 alpha:1].CGColor);
CGContextFillRect(context, CGRectMake(0, 0, 1, 1));
self.imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
此代码有效,只是生成的图像非常柔和,显然是由于抗锯齿/插值的积极尝试。我需要使用最近邻插值来缩放图像。如何防止这种抗锯齿?
谢谢!
【问题讨论】:
imageView 的边界是什么? 【参考方案1】:虽然您绘制到上下文中的图像不使用抗锯齿(即使它实际上并没有对您绘制的特定图像产生影响),但您仍然可以从图像中获得默认的插值行为查看。
要改变它,调整视图层的magnificationFilter
/minificationFilter
属性:
self.imageView.layer.magnificationFilter = kCAFilterNearest;
self.imageView.layer.minificationFilter = kCAFilterNearest;
(您需要添加 QuartzCore 框架才能使其工作。)
【讨论】:
以上是关于在 iOS 中,如何在没有抗锯齿/插值的情况下绘制位图?的主要内容,如果未能解决你的问题,请参考以下文章
在OpenGL中绘制到半透明帧缓冲区时如何抗锯齿? [复制]