tianyu的专栏

-- 宁静致远

iPhone图形开发绘图小结

1、绘图总结:

绘图前设置:

  1. CGContextSetRGBFillColor/CGContextSetFillColorWithColor //填充色
  2. CGContextSetRGBStrokeColor/CGContextSetStrokeColorWithColor //笔颜色
  3. CGContextSetLineWidth //线宽度

绘图后设置:

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

2.常见图形绘制:

  1. CGContextFillRect/CGContextFillRects
  2. CGContextFillEllipseInRect
  3. CGContextAddRect/CGContextAddRects
  4. CGContextAddEllipseInRect
  5. CGContextAddLines
  6. CGContextMoveToPoint
  7. CGContextAddLineToPoint

3.常见控制方法:

  1. CGContextSaveGState
  2. CGContextRestoreGState

4.创建内存图像context:

  1. CGBitmapContextCreate <-----CGContextRlease释放
  2. CGColorSpaceCreateWithName (KCGColorSpaceGenericRGB)
  3. CGColorSpaceRlease
  4. CGBitmapContextCreateImage() <-----CGImageRlease 释放.
  5. eg:
  6. CGContextRefMyCreateBitmapContext(intpixelsWide,intpixelsHigh)
  7. {
  8. CGContextRef context=NULL;
  9. CGColorSpaceRefcolorSpace;
  10. void* bitmapData;
  11. int bitmapByteCount;
  12. int bitmapBytesPerRow;
  13. bitmapBytesPerRow =(pixelsWide*4);
  14. bitmapByteCount =(bitmapBytesPerRow*pixelsHigh);
  15. colorSpace=CGColorSpaceCreateDeviceRGB();
  16. bitmapData=malloc(bitmapByteCount);
  17. if(bitmapData==NULL)
  18. {
  19. fprintf(stderr,"Memorynotallocated!");
  20. returnNULL;
  21. }
  22. context=CGBitmapContextCreate(bitmapData,
  23. pixelsWide, pixelsHigh, 8,
  24. bitmapBytesPerRow, colorSpace,
  25. kCGImageAlphaPremultipliedLast);
  26. if(context==NULL)
  27. {
  28. free(bitmapData);
  29. fprintf(stderr,"Contextnotcreated!");
  30. returnNULL;
  31. }
  32. CGColorSpaceRelease(colorSpace);
  33. returncontext;
  34. }

5.图形的变换:

  1. CGContextTranslateCTM
  2. CGContextRotateCTM
  3. CGContextScaleCTM

6.常用函数:

  1. CGRectContainsPoint();
  2. CGRectContainsRect();
  3. CGRectIntersectsRect();
  4. CGRectIntersection();
  5. CGPointEqualToPoint();
  6. CGSizeEqualToSize();

7.从原图片中取小图.

  1. CGImageCreateWithImageInRect

8.屏幕快照:

  1. #import "QuartzCore/QuartzCore.h"
  2. UIGraphicsBeginImageContext(yourView.frame.size);
  3. [[yourView layer] renderInContext:UIGraphicsGetCurrentContext()];
  4. UIImage*screenshot =UIGraphicsGetImageFromCurrentImageContext();
  5. UIGraphicsEndImageContext();
  6. from:http://www.cppblog.com/zhangyuntaoshe/articles/123066.html

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

  1. To graphically merge two images into a new image, you do something like this:
  2. UIImage *result = nil;
  3. unsignedchar *data = calloc(1,size.width*size.height*kBytesPerPixel);
  4. if (data != NULL) {
  5. // kCGImageAlphaPremultipliedLast 为预记录的#define value
  6. // 设置context上下文
  7. CGContextRef context = CGBitmapContextCreate(
  8. data, size.width, size.height, 8, size.width*kBytesPerPixel,
  9. CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedLast);
  10. if (context != NULL) {
  11. UIGraphicsPushContext(context);
  12. // Image 为下载的背景图片,用于比较context
  13. CGContextTranslateCTM(context, 0, size.height);
  14. CGContextScaleCTM(context, 1, -1);
  15. [image drawInRect:imageRect];
  16. [image2 drawInRect:image2Rect];
  17. UIGraphicsPopContext();
  18. CGImageRef imageRef = CGBitmapContextCreateImage(context);
  19. if (imageRef != NULL) {
  20. result = [UIImageimageWithCGImage:imageRef];
  21. CGImageRelease(imageRef);
  22. }
  23. CGContextRelease(context);
  24. }
  25. free(data);
  26. }
  27. return result;

关键方法:

  1. CGContextRef context = CGBitmapContextCreate();
  2. CGContextTranslateCTM();
  3. CGContextScaleCTM();
  4. CGImageRef imageRef = CGBitmapContextCreateImage(context);
  5. CGImageRelease(imageRef);

小结:iPhone图形开发绘图教程的内容介绍完了,希望本文对你有所帮助!

 

http://yangping-account.iteye.com/blog/1329144

阅读更多
个人分类: 苹果
想对作者说点什么? 我来说一句

CAD图形引擎库VectorDraw6.0web示例

2013年05月20日 119KB 下载

iphone 绘图小结

绘图小结

zypsg zypsg

2011-02-25 19:39:00

阅读数:1492

没有更多推荐了,返回首页

不良信息举报

iPhone图形开发绘图小结

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭