Как реализовать альфа-градиент на изображении?
Я хочу реализовать альфа-градиент на изображении. От 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)?
Можно ли отредактировать пиксели свойства UIImage CGImage
Ответ 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];