2014-02-21 3 views
0

У меня возникла проблема с пониманием причины следующего метода, чтобы вернуть изображения, которые заметно пикселируются. Я дважды проверил размер изображения, и это нормально. Более того, без тонировки края изображения гладкие и не имеют пикселизации.Цвет оттенка UIImages получает пиксели

Метод тонировки изображения, основанный на свойстве tintColor IOS7 ImageView, прекрасно работает, однако мне бы хотелось узнать, что не так со следующим кодом, потому что он работает для всех, кроме меня. Благодаря!

- (UIImage *)imageTintedWithColor:(UIColor *)color 
{ 
if (color) { 
    UIImage *img = self; // The method is a part of UIImage category, hence the "self" 
    UIGraphicsBeginImageContext(img.size); 

    // get a reference to that context we created 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    // set the fill color 
    [color setFill]; 

    // translate/flip the graphics context (for transforming from CG* coords to UI* coords 
    CGContextTranslateCTM(context, 0, img.size.height); 
    CGContextScaleCTM(context, 1.0, -1.0); 

    // set the blend mode to color burn, and the original image 
    CGContextSetBlendMode(context, kCGBlendModeColorBurn); 
    CGRect rect = CGRectMake(0, 0, img.size.width, img.size.height); 
    CGContextDrawImage(context, rect, img.CGImage); 

    // set a mask that matches the shape of the image, then draw (color burn) a colored rectangle 
    CGContextSetBlendMode(context, kCGBlendModeSourceIn); 
    CGContextAddRect(context, rect); 
    CGContextDrawPath(context,kCGPathFill); 

    // generate a new UIImage from the graphics context we drew onto 
    UIImage *coloredImg = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    //return the color-burned image 
    return coloredImg; 
} 

return self; 

} 

ответ

1

Изменить эту строку:

UIGraphicsBeginImageContext(img.size); 

к:

UIGraphicsBeginImageContextWithOptions(img.size, NO, 0); 

Если ваши изображения никогда не будет иметь прозрачность, изменить NO к YES.

+0

Вы были совершенно правы! Из документации: 'UIGraphicsBeginImageContext() - эта функция эквивалентна вызову функции UIGraphicsBeginImageContextWithOptions с непрозрачным параметром, установленным в NO и масштабным коэффициентом 1.0'. Таким образом, разница была «Масштабный коэффициент». @rmaddy, не могли бы вы объяснить, в чем разница между масштабным коэффициентом 0 и 1? – Michael

+1

Значение '0' означает определить, должно ли использоваться значение' 1' или '2' на основе устройства. Устройство сетчатки приведет к тому, что «2» будет использоваться, в то время как устройство без сетчатки приведет к использованию «1». – rmaddy

+0

Фантастический ответ, большое спасибо – Michael

Смежные вопросы