Как реализовать альфа-градиент на изображении? - PullRequest
15 голосов
/ 06 мая 2011

Я хочу реализовать альфа-градиент на изображении.От 0,5 альфа в верхней части изображения до 0,0 в нижней части.Любой совет, учебник, ссылка приветствуется.

Ответы [ 4 ]

25 голосов
/ 10 мая 2011

Вы можете использовать CGImageCreateWithMask, чтобы применить к нему маскирующее изображение.Вы можете сгенерировать подходящую маску достаточно просто, рисуя в CGBitmapContext в оттенках серого или только в альфа-формате с помощью CGContextDrawLinearGradient.

Если она отображается как содержимое CALayer, вы можете применить соответствующий маскирующий слой к родительскомусвойство слоя mask.Вы можете использовать CAGradientLayer с соответствующими цветами для создания этой маски.

Вы можете нарисовать изображение в CGBitmapContext, а затем нарисовать соответствующий альфа-градиент поверх него, используя kCGBlendModeDestinationIn.Или сначала нарисуйте градиент и нарисуйте на нем изображение, используя kCGBlendModeSourceIn.В обоих случаях CGContextDrawLinearGradient снова ваш друг.Затем, конечно, получите изображение из CGContext, используя CGBitmapContextCreateImage или CGImageCreate в базовом буфере данных.

Или, конечно, если вы управляете исходным изображением и вам никогда не нужна версия безальфа-градиент, вы можете просто сохранить его как PNG с соответствующими значениями альфа в первую очередь.

6 голосов
/ 09 мая 2011

Вы можете попробовать 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 в этом предыдущем ТАК вопрос

Вы можете перейти к Графические контексты .Все рисование происходит в графическом контексте.Если вы хотите создать изображение с радиальным или линейным градиентом или чем-то еще, вам нужно:

  • Создать графический контекст для вашего изображения с помощью
    UIGraphicsBeginImageContextWithOptions.
  • Делайте все, что хотите, чтобы изображение появилось на изображении.
  • Позвоните UIGraphicsGetImageFromCurrentImageContext, чтобы получить изображение из контекста.
    Это дает вам UIImage, поэтому нетнеобходимо конвертировать из CGImage.
  • . Вызовите UIGraphicsEndImageContext, чтобы очистить контекст.

Вы также можете взглянуть на Радиальный градиент на UImage

2 голосов
/ 09 мая 2011

Создайте новое изображение, читая пиксели в существующем изображении (получая их RGBA) построчно, добавляя их к новому изображению с теми же значениями RGB, но корректируя альфа-значения для каждой строки.

Некоторые другие ТАК вопросы, которые должны дать вам все, что вам нужно для этого:

Как получить данные пикселей из UIImage (Cocoa Touch) или CGImage (Core Graphics)?

Можно ли отредактировать пиксели свойства UIImage CGImage

1 голос
/ 05 августа 2014

Я нашел что-то здесь , оно прекрасно работает

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]; 
...