iOS绘制颜色渐变

本文介绍了一种在iOS开发中创建渐变颜色UIImage的方法。通过使用CGColorSpaceCreateDeviceRGB和CGGradientCreateWithColorComponents等函数,可以实现自定义宽度和高度的渐变颜色UIImage。此外,还介绍了如何利用CGContextDrawLinearGradient在位图上下文中绘制线性渐变。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

- (UIColor *)getUIImageToColor:(float)h withWidth:(float)w

{

    float TITLE_CONTROL_HEIGHT = h;

    float TITLE_CONTROL_WIDTH = w;

    /*

     CGCradientCreateWithColorComponents函数需要四个参数:

     

     色彩空间:(Color Space)这是一个色彩范围的容器,类型必须是CGColorSpaceRef.对于这个参数,我们可以传入CGColorSpaceCreateDeviceRGB函数的返回值,它将给我们一个RGB色彩空间。

     

     颜色分量的数组:这个数组必须包含CGFloat类型的红、绿、蓝和alpha值。数组中元素的数量和接下来两个参数密切。从本质来讲,你必须让这个数组包含足够的值,用来指定第四个参数中位置的数量。所以如果你需要两个位置位置(起点和终点),那么你必须为数组提供两种颜色

     

     位置数组,颜色数组中各个颜色的位置:此参数控制该渐变从一种颜色过渡到另一种颜色的速度有多快。

     

     位置的数量:这个参数指明了我们需要多少颜色和位置。

     

     */

    

    CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();

    

    CGFloat colors[] =

    

    {

        

        103 / 255.0, 0 / 255.0, 4 / 255.0, 1.00,

        

        255 / 255.0, 255 / 255.0, 255 / 255.0, 1.00,

        

        103 / 255.0, 0 / 255.0, 4 / 255.0, 1.00,

    };

    

    CGGradientRef myGradient = CGGradientCreateWithColorComponents

    

    (rgb, colors, NULL, sizeof(colors)/(sizeof(colors[0])*4));

    

    // Allocate bitmap context

    

    CGContextRef bitmapContext = CGBitmapContextCreate(NULL, TITLE_CONTROL_WIDTH, TITLE_CONTROL_HEIGHT, 8, 4 * TITLE_CONTROL_WIDTH,

                                                       CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Little);

    

    // Draw Gradient Here

    

    /*

     

     创建好线性渐变后,我们将使用CGContextDrawLinearGradient过程在图形上下文中绘制,此过程需要五个参数:

     

     Graphics context 指定用于绘制线性渐变的图形上下文。

     

     Axial gradient 我们使用CGGradientCreateWithColorComponents函数创建的线性渐变对象的句柄

     

     start point 图形上下文中的一个CGPoint类型的点,表示渐变的起点。

     

     End Point表示渐变的终点。

     

     Gradient drawing options 当你的起点或者终点不在图形上下文的边缘内时,指定该如何处理。你可以使用你的开始或结束颜色来填充渐变以外的空间。此参数为以下值之一:KCGGradientDrawsAfterEndLocation扩展整个渐变到渐变的终点之后的所有点 KCGGradientDrawsBeforeStartLocation扩展整个渐变到渐变的起点之前的所有点。0不扩展该渐变。

     

     */

    

    CGContextDrawLinearGradient(bitmapContext, myGradient, CGPointMake(TITLE_CONTROL_WIDTH / 2.0f, 0.0f),

                                CGPointMake(TITLE_CONTROL_WIDTH / 2.0f, TITLE_CONTROL_HEIGHT),

                                kCGGradientDrawsBeforeStartLocation);

    

    // Create a CGImage from context

    

    CGImageRef cgImage = CGBitmapContextCreateImage(bitmapContext);

    

    // Create a UIImage from CGImage

    

    UIImage *uiImage = [UIImage imageWithCGImage:cgImage];

    

    // Release the CGImage

    

    CGImageRelease(cgImage);

    

    // Release the bitmap context

    

    CGContextRelease(bitmapContext);

    

    return [UIColor colorWithPatternImage:uiImage];

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值