Я хочу реализовать альфа-градиент на изображении. От 0,5 альфа вверху изображения до 0.0 внизу. Любые советы, руководства, ссылки приветствуются.
Как реализовать альфа-градиент на изображении?
Ответ 1
Вы можете использовать CGImageCreateWithMask для применения к нему маскирующего изображения. Вы можете создать соответствующую маску достаточно просто, обратившись к полутоновому или альфа-только CGBitmapContext с CGContextDrawLinearGradient.
Если он отображается как содержимое CALayer, вы можете применить соответствующий слой маскирования к свойству родительского слоя mask. Вы можете использовать CAGradientLayer с соответствующими цветами для создания этой маски.
Вы можете нарисовать изображение в CGBitmapContext, а затем нарисуйте соответствующий альфа-градиент над ним, используя kCGBlendModeDestinationIn. Или сначала нарисуйте градиент, и нарисуйте изображение над ним, используя kCGBlendModeSourceIn. В обоих случаях CGContextDrawLinearGradient снова ваш друг. Затем, конечно, выведите изображение из CGContext, используя CGBitmapContextCreateImage или CGImageCreate в базовом буфере данных.
Или, конечно, если вы контролируете исходное изображение и никогда не нуждаетесь в версии без альфа-градиента, вы можете просто сохранить ее как PNG с соответствующими альфа-значениями в первую очередь.
Ответ 2
Вы можете попробовать CAGradientLayer.
UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
[view.layer insertSublayer:gradient atIndex:0];
Другой вариант
Попробуйте ответ, предложенный @Caleb в предыдущем вопросе SO
Вы можете перейти Графические контексты. Весь рисунок происходит в графике контекст. Если вы хотите создать изображение с радиальным градиентом или линейный градиент или что-то еще, вам необходимо:
- Создайте графический контекст для вашего изображения с помощью
UIGraphicsBeginImageContextWithOptions.- Сделайте любой рисунок, который вы хотите отобразить на изображении.
- Вызов
UIGraphicsGetImageFromCurrentImageContextдля получения изображения из контекста.
Это дает вамUIImage, поэтому нет необходимости для преобразования изCGImage.- Вызовите
UIGraphicsEndImageContext, чтобы очистить контекст.Вы также можете посмотреть Radial градиент на UImage
Ответ 3
Создайте новое изображение, прочитав пиксели в существующем изображении (получая их RGBA) по строкам, добавив их к новому изображению с теми же значениями RGB, но настроив альфа-значения для каждой строки.
Некоторые другие вопросы SO, которые должны дать вам все, что вам нужно для этого:
Как получить пиксельные данные из UIImage (Cocoa Touch) или CGImage (Core Graphics)?
Ответ 4
Я нашел что-то здесь, он отлично работает!
AlphaGradientView* gradient = [[AlphaGradientView alloc] initWithFrame:
CGRectMake(self.view.frame.size.width - 150, 0, 150,
self.view.frame.size.height)];
gradient.color = [UIColor yellowColor];
gradient.direction = GRADIENT_RIGHT;
[self.view addSubview:gradient];