У меня возникла проблема с пониманием причины следующего метода, чтобы вернуть изображения, которые заметно пикселируются. Я дважды проверил размер изображения, и это нормально. Более того, без тонировки края изображения гладкие и не имеют пикселизации.Цвет оттенка 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;
}
Вы были совершенно правы! Из документации: 'UIGraphicsBeginImageContext() - эта функция эквивалентна вызову функции UIGraphicsBeginImageContextWithOptions с непрозрачным параметром, установленным в NO и масштабным коэффициентом 1.0'. Таким образом, разница была «Масштабный коэффициент». @rmaddy, не могли бы вы объяснить, в чем разница между масштабным коэффициентом 0 и 1? – Michael
Значение '0' означает определить, должно ли использоваться значение' 1' или '2' на основе устройства. Устройство сетчатки приведет к тому, что «2» будет использоваться, в то время как устройство без сетчатки приведет к использованию «1». – rmaddy
Фантастический ответ, большое спасибо – Michael