• IOS开发-画线画图


    1、绘图总结:

    绘图前设置:

    CGContextSetRGBFillColor/CGContextSetFillColorWithColor //填充色
    CGContextSetRGBStrokeColor/CGContextSetStrokeColorWithColor //笔颜色
    CGContextSetLineWidth //线宽度
    绘图后设置:

    注: 画完图后,必须 先用CGContextStrokePath来描线,即形状,后用CGContextFillPath来填充形状内的颜色.

    2.常见图形绘制:

    CGContextFillRect/CGContextFillRects
    CGContextFillEllipseInRect
    CGContextAddRect/CGContextAddRects
    CGContextAddEllipseInRect
    CGContextAddLines
    CGContextMoveToPoint
    CGContextAddLineToPoint
    3.常见控制方法:

    CGContextSaveGState
    CGContextRestoreGState
    4.创建内存图像context:

    CGBitmapContextCreate <-----CGContextRlease释放
    CGColorSpaceCreateWithName (KCGColorSpaceGenericRGB)
    CGColorSpaceRlease
    CGBitmapContextCreateImage() <-----CGImageRlease 释放.
    eg:
    CGContextRefMyCreateBitmapContext(intpixelsWide,intpixelsHigh)
    {
    CGContextRef context=NULL;
    CGColorSpaceRefcolorSpace;
    void* bitmapData;
    int bitmapByteCount;
    int bitmapBytesPerRow;
    bitmapBytesPerRow =(pixelsWide*4);
    bitmapByteCount =(bitmapBytesPerRow*pixelsHigh);
    colorSpace=CGColorSpaceCreateDeviceRGB();
    bitmapData=malloc(bitmapByteCount);
    if(bitmapData==NULL)
    {
    fprintf(stderr,"Memorynotallocated!");
    returnNULL;
    }
    context=CGBitmapContextCreate(bitmapData,
    pixelsWide, pixelsHigh, 8,
    bitmapBytesPerRow, colorSpace,
    kCGImageAlphaPremultipliedLast);
    if(context==NULL)
    {
    free(bitmapData);
    fprintf(stderr,"Contextnotcreated!");
    returnNULL;
    }
    CGColorSpaceRelease(colorSpace);
    returncontext;
    }
    5.图形的变换:

    CGContextTranslateCTM
    CGContextRotateCTM
    CGContextScaleCTM
    6.常用函数:

    CGRectContainsPoint();
    CGRectContainsRect();
    CGRectIntersectsRect();
    CGRectIntersection();
    CGPointEqualToPoint();
    CGSizeEqualToSize();
    7.从原图片中取小图.

    CGImageCreateWithImageInRect
    8.屏幕快照:

    #import "QuartzCore/QuartzCore.h"

    UIGraphicsBeginImageContext(yourView.frame.size);
    [[yourView layer] renderInContext:UIGraphicsGetCurrentContext()];
    UIImage*screenshot =UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    合并两张bit图到一张image的方法

    To graphically merge two images into a new image, you do something like this:
    UIImage *result = nil;
    unsignedchar *data = calloc(1,size.width*size.height*kBytesPerPixel);
    if (data != NULL)
    {
    // kCGImageAlphaPremultipliedLast 为预记录的#define value
    // 设置context上下文
    CGContextRef context = CGBitmapContextCreate(
    data, size.width, size.height, 8, size.width*kBytesPerPixel,
    CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedLast);
    if (context != NULL)
    {
    UIGraphicsPushContext(context);
    // Image 为下载的背景图片,用于比较context
    CGContextTranslateCTM(context, 0, size.height);
    CGContextScaleCTM(context, 1, -1);
    [image drawInRect:imageRect];
    [image2 drawInRect:image2Rect];
    UIGraphicsPopContext();
    CGImageRef imageRef = CGBitmapContextCreateImage(context);
    if (imageRef != NULL)
    {
    result = [UIImageimageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    }
    CGContextRelease(context);
    }
    free(data);
    }
    return result;
    关键方法:

    CGContextRef context = CGBitmapContextCreate();
    CGContextTranslateCTM();
    CGContextScaleCTM();
    CGImageRef imageRef = CGBitmapContextCreateImage(context);
    CGImageRelease(imageRef);

  • 相关阅读:
    《PHP
    2018/06/11 数据库设计规范
    RequireJs 与 SeaJs的相同之处与区别
    null 与 undefinded
    page 分页
    fullPage的使用
    touch事件(寻找触摸点 e.changedTouches)
    t添加最佳视口
    随鼠标动的炫彩小球
    随机小球
  • 原文地址:https://www.cnblogs.com/greywolf/p/2616458.html
Copyright © 2020-2023  润新知