zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    推荐一本书 改善你的视力:跟眼镜说再见
    Gentoo中gcc4.1.2到gcc4.3.2的升级
    msbuild学习的一些相关链接
    SqlServer 2005安装问题
    Gentoo linux中安装php5运行环境
    sql 时间函数(全)
    asp.net中的对话框
    win7 资源管理器指向我的电脑
    C/C++ 位操作 总结
    【转】Java字节序转换
  • 原文地址:https://www.cnblogs.com/greywolf/p/2616458.html
Copyright © 2011-2022 走看看