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