iphone 绘图小结

    技术2022-05-20  67

    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(); 

    from:http://www.cppblog.com/zhangyuntaoshe/articles/123066.html

     

    合并两张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);

    from:http://wzn860701.blog.163.com/blog/static/361528062009102502716872/

     


    最新回复(0)