CoreGraphics
-
图形绘制:使用 CoreGraphics 可以绘制各种基本图形,如线条、矩形、圆形、多边形等。
-
图像处理:CoreGraphics 可以用于对图像进行缩放、旋转、裁剪、颜色调整等操作。
-
文本处理:可以使用 CoreGraphics 绘制文本,设置字体、大小、颜色等属性。
-
图形上下文管理:通过 CoreGraphics 可以创建和管理图形上下文,用于绘制和渲染图形。
-
动画效果:利用 CoreGraphics 可以实现一些简单的动画效果,如淡入淡出、移动、缩放等。
-
坐标系统转换:CoreGraphics 提供了坐标系统转换的功能,可以在不同的坐标系之间进行转换。
-
绘图和涂鸦应用:开发绘图或涂鸦应用程序时,可以使用 CoreGraphics 来实现绘图功能。
-
游戏开发:在游戏开发中,可以使用 CoreGraphics 进行图形绘制和动画效果的实现。
CGColorGetComponents
函数将颜色的分量值存储在 components
数组中,数组的顺序取决于颜色空间的类型。例如,在 RGB 颜色空间中,数组的顺序为 red、green 和 blue;在 CMYK 颜色空间中,数组的顺序为 cyan、magenta、yellow 和 black
CGColorGetComponents(CGColorRef color, const CGFloat *components)
参数说明:
color:要获取分量值的颜色对象。
components:指向一个 CGFloat 数组的指针,该数组用于存储颜色的分量值。
请注意,CGColorGetComponents
函数仅适用于某些颜色空间,例如 RGB、CMYK 等。对于其他颜色空间,可能需要使用不同的方法来获取分量值。
CGColorRef colorRef = [UIColor colorWithHue:(CGFloat)2.0/(CGFloat)kPaletteSize saturation:kSaturation brightness:kBrightness alpha:1.0].CGColor;
const CGFloat *components = CGColorGetComponents(colorRef);
[_painView setBrushColorWithRed:components[0] green:components[1] blue:components[2]];
一个小用例
-(GLuint)loadTexture:(NSString *)fileNmae {
CGImageRef imageRef = [UIImage imageNamed:fileNmae].CGImage;
if (!imageRef) {
NSLog(@"failed to load image %@",fileNmae);
}
// 图片宽高
size_t width = CGImageGetWidth(imageRef);
size_t height = CGImageGetHeight(imageRef);
//获取图片字节数 宽 x 高 * 4
GLubyte *spriteData = (GLubyte *)calloc(width * height * 4, sizeof(GLbyte));
//创建上下文
CGContextRef spriteContext = CGBitmapContextCreate(spriteData, width, height, 8, width * 4, CGImageGetColorSpace(imageRef),kCGImageAlphaPremultipliedLast);
//绘制图片
CGRect rect = CGRectMake(0,0, width, height);
CGContextDrawImage(spriteContext, rect, imageRef);
CGContextRelease(spriteContext);
// 绑定纹理
glBindTexture(GL_TEXTURE_2D, 0);
//设置纹理的属性
//放大过滤/缩小过滤
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// 环绕方式
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
//载入纹理
float fw = width, fh = height;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, fw, fh, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData);
glBindTexture(GL_TEXTURE_2D, 0);
free(spriteData);
return 0;
}
一个大牛总结的挺不错