ios CoreGraphics 随笔

发布时间:2024年01月07日

?CoreGraphics?

  1. 图形绘制:使用 CoreGraphics 可以绘制各种基本图形,如线条、矩形、圆形、多边形等。

  2. 图像处理:CoreGraphics 可以用于对图像进行缩放、旋转、裁剪、颜色调整等操作。

  3. 文本处理:可以使用 CoreGraphics 绘制文本,设置字体、大小、颜色等属性。

  4. 图形上下文管理:通过 CoreGraphics 可以创建和管理图形上下文,用于绘制和渲染图形。

  5. 动画效果:利用 CoreGraphics 可以实现一些简单的动画效果,如淡入淡出、移动、缩放等。

  6. 坐标系统转换:CoreGraphics 提供了坐标系统转换的功能,可以在不同的坐标系之间进行转换。

  7. 绘图和涂鸦应用:开发绘图或涂鸦应用程序时,可以使用 CoreGraphics 来实现绘图功能。

  8. 游戏开发:在游戏开发中,可以使用 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;
}

一个大牛总结的挺不错

iOS-CoreGraphics图形库 - 简书

CoreGraphics详解 - 简书

文章来源:https://blog.csdn.net/weixin_38432324/article/details/135434804
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。