2014-09-09 4 views
0

Я хочу сделать следующее:UIImage Добавить Gray tranparency

enter image description here

Как вы можете видеть одно изображение (выбранное) не имеет серую увядает, а другой (невыбранных пункт) делает не.

Я пробовал несколько решений. В том числе окрашивания изображений с серым цветом

- (UIImage *)colorizeImage:(UIImage *)image withColor:(UIColor *)color { 
    UIGraphicsBeginImageContext(image.size); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGRect area = CGRectMake(0, 0, image.size.width, image.size.height); 

    CGContextScaleCTM(context, 1, -1); 
    CGContextTranslateCTM(context, 0, -area.size.height); 

    CGContextSaveGState(context); 
    CGContextClipToMask(context, area, image.CGImage); 

    [color set]; 
    CGContextFillRect(context, area); 

    CGContextRestoreGState(context); 

    CGContextSetBlendMode(context, kCGBlendModeMultiply); 

    CGContextDrawImage(context, area, image.CGImage); 

    UIImage *colorizedImage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    return colorizedImage; 
} 

Однако при таком подходе я бегу на вопрос где, если Б.Г. образа имеет прозрачность белый ниже его просвечивания, и это выглядит странно:

enter image description here

Как определить прозрачность и изменить прозрачность на белый? Или есть лучшее решение для этого?

image = [self imageWithImage:image scaledToSize:CGSizeMake((self.collectionViewContainer.frame.size.width/3),90)]; 
UIImage *unSelected = [self colorizeImage:image withColor:[[UIColor grayColor] colorWithAlphaComponent:.9]]; 
UIImageView *imgView = [[UIImageView alloc] initWithImage:unSelected highlightedImage:image]; 
+0

В McDonads? image, вы хотите, чтобы белая область вообще выглядела серым? – rmaddy

+0

Вы можете добавить UIView, который имеет черный или серый фон и добавить его непосредственно над вашим UIImageView. Вы можете изменить альфа для разных уровней прозрачности. Убедитесь, что для непрозрачного свойства UIView установлено значение NO. –

+0

@rmaddy Я хочу, чтобы все изображения имели одинаковую затенение. Так что я хочу, чтобы белая область была серой. – Aziz

ответ

0

Поскольку вы просто хотите применить серый оттенок к изображению, попробуйте это следующим образом:

- (UIImage *)colorizeImage:(UIImage *)image withColor:(UIColor *)color { 
    UIGraphicsBeginImageContext(image.size, NO, image.scale); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGRect area = CGRectMake(0, 0, image.size.width, image.size.height); 

    [image drawInRect:area]; 

    [color set]; 
    CGContextFillRect(context, area); 

    UIImage *colorizedImage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    return colorizedImage; 
} 

Это втягивает изображение, а затем рисует цвет на изображении. Предполагая, что цвет частично прозрачен, все новое изображение будет окрашено.

Как вы его первоначально, вы только окрашивали непрозрачные части из-за обрезки изображения.

Это обновление также применяет правильный масштаб к новому изображению в соответствии с исходным изображением.

+0

Это потрясающе, спасибо! – Aziz

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