Как реализовать альфа-градиент на изображении?

Я хочу реализовать альфа-градиент на изображении. От 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];