`
yidongkaifa
  • 浏览: 4069338 次
文章分类
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    iOS绘画板画图画线

    基本完成画图的所有简单功能,包括相册、照相机选取照片,处理照片包括撤销、前进、清屏、保存,选择画笔颜色、粗细等。里面用了一些block代码块,对于初学者应该还是不错的。

    IOS 使用代码画贝塞尔曲线demo

    IOS 使用代码画贝塞尔曲线demo ,不懂得可以多看看,

    ios 画运动曲线图

    ios软件开发 用了一个运动的曲线画图,觉得挺不错的 跟打家分享

    iOS画线画圆源码

    根据手势画线,画圆,包含undo,redo,clear操作

    ios上的图片处理与动画代码

    本代码里实现了在IOS上基于Quartz 2D的画图,画线等及Core Animation的动画效果.

    ios手绘画板app

    一个类似windows画图的小demo,可以绘制线和简单的形状文字等。

    贝塞尔曲线画图

    使用贝塞尔曲线实现画图的功能,可以撤销所画的图

    UIBezierPath和CAShapeLayer画图(iOS源代码)

    来源: Licence: MIT 作者: UIBezierPath和CAShapeLayer画图,这个DEMO展示了如何使用贝塞尔曲线画出了各种图形,包括叮当猫

    android开发资料大全

    Android通过画线实现button效果 Android如何防止apk程序被反编译 Android 之 AIDL 和远程 Service 调用 Android 相对布局技巧 android开发环境之Logcat(日志)教程实例汇总 android网络通信之socket教程实例汇总 ...

    (0169)-iOS/iPhone/iPAD/iPod源代码-绘图(Drawing)-Smooth Line View

    即使是AppStore上,都有很多绘画App在迅速画圆圈时,所绘制的圆弧不够平滑,会出现折线(锯齿),这个代码较好地解决了这个问题。代码仅用Quartz解决了这个问题,不需要用到OpenGL。 注意:请在Mac下解压使用

    CGcontext 2D画图 demo

    通过本demo可以学习CGCOntext 2D 简单用法。大神们勿喷。基础而已,会的请绕行。

    react-native-chart-demo

    由于图表比较简单,有一些需要自定义的地方,使用第三方框架需要熟悉接口,相对于自己画,时间成本都差不多,画出来更便于需求变更修改。(第三方表格框架推荐和。相对来说victory-native要好一点,react-native-...

    期货数据画K线

    我把以前的画k线功能单独提取出来,添加了一些注释,增加了一些实用的新功能,代码中的数字都是画图像素的一点微调,作为参考还是很不错的,也感谢之前给我留言的人。

    画图(iPhone源代码)

    来源:Licence:Custom作者:"杨"ヤ孓  实现画图功能,可以动态选择画笔颜色,线条粗细等,适配ios6,ios7 小编注:感谢开发者@"杨"ヤ孓 。

    使用Qt实现的C++画板(包含源码,可执行exe文件)

    //这个函数是生成按钮被按下时的画图实现: void MainWindow::on_draw_button_clicked() { if (ui-&gt;tabWidget-&gt;currentIndex()==0)//这个是画圆的部分 { circle =new Circle(new QPoint(ui-&gt;circle_x_spinBox-&gt;...

    安卓无限绘画工具 Infinite Painter 6.6.1 中文多语免费版.zip

    Infinite Painter 是一款支持 Android 和 IOS 的轻量级移动平台绘画工具。Infinite Painter 操作简便,导入图片后,可以转化,重新定义大小,旋转,翻转,或根据自己的喜好重新着色。拥有自动保存功能,不在害怕丢失...

    一个很好的应用绘画应用

    实现比较齐全的绘画功能,包括画线、画方形、画椭圆,重做,改变画笔颜色、透明度等等,随机绘画时,绘出的圆弧比较光滑。还有一个功能是对画出的所有内容进行快照。支持ARC或者non-ARC。是一个不错的画图应用。

    Bamboo Paper安卓apk

    透过 Bamboo Paper,笔记本在 Windows 8,Android 与 iOS 平台上可以和朋友同事分享,或汇出到各式云端服务及社交媒体 5.触控笔 为求最佳效果及体验,使用 Bamboo Paper 时请搭配 Wacom 触控笔使用。请上 bambo

Global site tag (gtag.js) - Google Analytics