注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

又一个部落格

换过很多备忘录,不知道这本怎么样!

 
 
 

日志

 
 

渐变 Gradients  

2010-07-20 16:24:26|  分类: cocoa |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
轴向(Axial)
   
 径向(Radial) 渐变 
两个创建渐变类的区别 CGGradientRef 可以使用同一个CGGradientRef对象来画轴向和径向渐变 在绘画时可以随时改变几何图形 Quartz计算渐变中的每个点的颜色。 很容易的定义多个位置和颜色。 Alpha 值可以变化. Available in iOS and Mac OS X v10.5 and later.   CGShadingRef 需要创建指定的 轴向或者 径向 渐变. 创建时必须指定几何性状. 你必须提供一个回调函数,计算出每个点的颜色渐变。 callback中需要用到两个位置和两个以上的颜色值,计算会比较麻烦/ Alpha values can vary in Mac OS X v10.3 and later, but not in Mac OS X v10.2. Available in iOS and Mac OS X v10.2 and later.  CGGradientRef 的基本步骤 1 创建 CGGradient 对象, 提供一个 colorspace,提供一个数组,包含两个以上的颜色, 提供一个数组,包含两个以上的颜色所处位置, 提供一个数组包含前面两个数组中元素个数. 2 调用CGContextDrawLinearGradient 或者 CGContextDrawRadialGradient ,提供参数 context, CGGradient 对象, drawing options, 开始和结尾的几何形状 (轴向渐变是两个点,径向渐变是圆心和半径). 3 释放CGGradient。
示例 效果图
   
创建一个图形上下文函数
CGContextRef MyCreateBitmapContext (int pixelsWide,          int pixelsHigh) {     CGContextRef    context = NULL;     CGColorSpaceRef colorSpace;     void *          bitmapData;     int             bitmapByteCount;     int             bitmapBytesPerRow;      //声明一个变量来代表每行的字节数。每一个位图像素的代表是4个字节,8bit红,8bit绿,8bit蓝,和8bit alpha通道信息(透明信息)。     bitmapBytesPerRow   = (pixelsWide * 4);     bitmapByteCount     = (bitmapBytesPerRow * pixelsHigh);      colorSpace = CGColorSpaceCreateDeviceRGB();// 创建一个通用的RGB色彩空间     bitmapData = malloc( bitmapByteCount );// 调用的malloc函数来创建的内存用来存储位图数据块     if (bitmapData == NULL)     {         fprintf (stderr, "Memory not allocated!");         return NULL;     }      //创建一个位图图形上下文     context = CGBitmapContextCreate (bitmapData,           pixelsWide,           pixelsHigh,           8,      // bits per component           bitmapBytesPerRow,           colorSpace,           kCGImageAlphaPremultipliedLast);     if (context== NULL)     {         free (bitmapData);         fprintf (stderr, "Context not created!");         return NULL;     }     //释放colorSpace 注意使用的函数     CGColorSpaceRelease( colorSpace );      return context; }  //在 viewdidload 中添加代码 - (void)viewDidLoad {     [super viewDidLoad];   CGContextRef myBitmapContext = MyCreateBitmapContext (400, 300);   CGGradientRef myGradient;  CGColorSpaceRef myColorspace;  size_t num_locations = 2;  CGFloat locations[2] = { 1.0, 0.0 }; //下面两种颜色所在轴上的位置 是个浮点数,0表示开始位置。1表示结束位置  CGFloat components[8] = { 1.0, 0.0, 0.0, 1.0,  // 起始颜色   0.0, 1.0, 0.0, 1.0 }; // 结束颜色   myColorspace = CGColorSpaceCreateDeviceRGB();  //色彩空间 rgb  //创建CGGradient对象  myGradient = CGGradientCreateWithColorComponents (myColorspace, components,                locations, num_locations);    //定义开始开始位置和结束位置  CGPoint myStartPoint, myEndPoint;  myStartPoint.x = 0.0;  myStartPoint.y = 0.0;  myEndPoint.x = 400.0;  myEndPoint.y = 0.0;  CGContextDrawLinearGradient (myBitmapContext, myGradient, myStartPoint, myEndPoint, 0);   ////////////  CGImageRef myImage = CGBitmapContextCreateImage (myBitmapContext);  CGContextRelease (myBitmapContext);  UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:myImage]];  [self.view addSubview:iv];  [iv release];  CGImageRelease(myImage); }
下面是画一个径向渐变
 
CGPoint myStartPoint, myEndPoint; CGFloat myStartRadius, myEndRadius; //起点圆心 myStartPoint.x = 20.0; myStartPoint.y = 20.0; //结束点圆心 myEndPoint.x = 300.0; myEndPoint.y = 300.0; //起点的半径 myStartRadius = 10.0; //结束点的半径 myEndRadius = 80.0; CGContextDrawRadialGradient (myBitmapContext, myGradient, myStartPoint, myStartRadius, myEndPoint, myEndRadius, kCGGradientDrawsAfterEndLocation);
CGShading 比CGGradientRef 麻烦很多,虽然它能够实现更加复杂的渐变,因为能控制每一个颜色点。暂时不打算研究,知道有这么一回事就ok了。 比如下图的渐变



参考:http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_shadings/dq_shadings.html#//apple_ref/doc/uid/TP30001066-CH207-TPXREF101
  评论这张
 
阅读(2861)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017