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

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

4 ответов


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

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

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

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


вы можете попробовать 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 чтобы очистить контекст.

вы также можете посмотреть радиальное градиент на формат


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

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

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

могу ли я редактировать пиксели свойства UIImage CGImage


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

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