Любой способ отключить растеризацию CALayerScale интерполяции / сглаживания в target-c / iPhone / iOS SDK? - PullRequest
2 голосов
/ 20 августа 2011

Я хочу избавиться от любой интерполяции / сглаживания / и т.д. при настройке myLayer.rasterizationScale = 0.01 и myLayer.shouldRasterize = YES;

Пример: enter image description here

Вот код, который я пытаюсь: - (void)drawRect:(CGRect)rect { CGContextRef ctx = UIGraphicsGetCurrentContext(); CALayer *sourceLayer = self.delegate.sourceImageView.layer; sourceLayer.rasterizationScale = 0.01; sourceLayer.shouldRasterize = YES; [sourceLayer renderInContext:ctx]; CGContextSetShouldAntialias(ctx, NO); CGContextSetAllowsAntialiasing(ctx, NO); CGContextSetInterpolationQuality(ctx, kCGInterpolationNone); }

Ожидаемый результат состоит в том, что изображение будет отображаться как короткое / пиксельное растровое изображение.

Есть идеи?Спасибо!

Редактировать: добавлен полный код drawRect, также попытался переместить функции Antialias сразу после строки UIGraphicsGetCurrentContext.

Редактировать: Попробуйте # 2 (ошибка!)

- (void)drawRect:(CGRect)rect
{
  CGContextRef ctx = UIGraphicsGetCurrentContext();
  CGContextSetShouldAntialias(ctx, NO);
  CGContextSetAllowsAntialiasing(ctx, NO);
  CGContextSetInterpolationQuality(ctx, kCGInterpolationNone);
  CALayer *layer = [CALayer layer];
  layer.contents = (id)[UIImage imageNamed:@"test.jpg"].CGImage;
  layer.frame = CGRectMake(0, 0, 320, 411);
  layer.rasterizationScale = 0.0001;
  layer.shouldRasterize = YES;
  layer.geometryFlipped = NO;
  layer.edgeAntialiasingMask = 0;
  layer.minificationFilter = kCAFilterNearest;
  [layer renderInContext:ctx];
}

1 Ответ

4 голосов
/ 25 марта 2015

Чтобы не выполнять интерполяцию, установите для свойства magnificationFilter слоя значение kCAFilterNearest.При желании также установите minificationFilter.

Кроме того, вам не следует настраивать свойства слоя внутри метода -drawRect:.Вместо этого инициализируйте свойства слоя при инициализации вида или когда вы хотите изменить содержимое слоя.

...