× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
描画命令のいろいろを書いていきます。
コンテキストを表すctxはCGContextRef型の変数. 色を表すr,g,b,aはCGFloat. 0.0~1.0で指定。 widthはCGFloat. その他はenumなど。 /////////////// 色指定・線の色 CGContextSetRGBStrokeColor(ctx, r, g, b, a); /////////////// 色指定・塗りつぶし色 CGContextSetRGBFillColor(ctx, r, g, b, a); /////////////// 線の太さ指定 CGContextSetLineWidth(ctx, width); /////////////// 線分の端の形状指定 CGContextSetLineCap(ctx, lineCap); enum CGLineCap { kCGLineCapButt, //なにもしない kCGLineCapRound, //端を丸くする kCGLineCapSquare //端を四角くする }; //////////////// 線分の接続点の形状指定 CGContextSetLineJoin(ctx, lineJoin); enum CGLineJoin { kCGLineJoinMiter, //角を斜めにする kCGLineJoinRound, //角を丸くする kCGLineJoinBevel //直角のまま }; ///////////////// 点線の形状指定 CGFloat len[]={10,2}; CGContextSetLineDash(ctxCanvas_, 0, len, sizeof(len)/sizeof(len[0])); 10ピクセル描画、2ピクセル空白、の繰り返しの点線になる。 第2引数をたとえば5にすると、5ピクセル描画、2ピクセル空白、10ピクセル描画、2ピクセル空白、10ピクセル描画、、、となる //////////////// パス指定の開始 CGContextBeginPath(ctx); //////////////// パスの始点指定 CGContextMoveToPoint(ctx, x, y); ///////////////// パスの追加 CGContextAddLineToPoint(ctx, x, y); ///////////////// パスを閉じる(現在地から始点までのパスを追加する) CGContextClosePath(ctx); ///////////////// パスに長方形を追加 CGContextAddRect(ctx, rect); CGContextAddRects(ctx, rects, count); ///////////////// パスに円弧を追加 CGContextAddArc(ctx, x, y, r, startRadian, endRadian, clockwise); clockwise=0のとき時計回り、1のとき反時計回り //////////////// 引いたパスを描画・線分 CGContextStrokePath(ctx); /////////////// 引いたパスを描画・塗りつぶし パスが閉じていない場合は、始点と終点を結んで閉じた図形として塗りつぶす CGContextFillPath(ctx); CGContextEOFillPath(ctx); 二重図形のときの塗りつぶしルールが異なる。詳しくは後述のパス詳細ページで。 デフォルトのCGContextFillPath()を使っていれば良いんじゃないかと思う。 ////////////////// 引いたパスに描画 CGContextDrawPath(ctx, pathDrawingMode); enum CGPathDrawingMode { kCGPathFill, //CGContextFillPath();と同 kCGPathEOFill, //CGContextEOFillPath();と同 kCGPathStroke, //CGContextStrokePath();と同 kCGPathFillStroke, //塗りつぶしと線分を両方描画する. kCGPathEOFillStroke //同上 }; 輪郭と塗りつぶしの両方を描画したいときは、この関数を使うこと。 CGContextStrokePath()とCGContextFillPath()を両方呼ぶのでは不便。一度描画したパスは消えてしまうので、このやり方だとパスをコピーして保持しておく必要も出てくる。 ////////////////// 線分描画 CGPoint points[] = {,,,}; CGContextStrokeLineSegments(ctx, points, count); 線分points[0]->points[1]を描画、線分points[2]->points[3]を描画、、、 //////////////// 長方形の描画・輪郭のみ CGContextStrokeRect(ctx, rect); CGContextStrokeRectWithWidth(ctx, rect, width); //////////////// 長方形の描画・塗りつぶし CGContextFillRect(ctx, rect); //////////////// 楕円の描画・線分 CGContextStrokeEllipseInRect(ctx, rect); rectに内接する楕円の描画 //////////////// 楕円の描画・塗りつぶし CGContextFillEllipseInRect(ctx, rect); //////////////// CGImageに焼き付け CGImageRef image = CGBitmapContextCreateImage(ctx); CGImageRelease(image); //////////////// CGImageの描画 CGContextDrawImage(ctx, rect, image); /////////////// クリア CGContextClearRect(ctx, rect); たくさんありすぎて書ききれないので、他は公式などを参照。 ブレンドモード、アンチエイリアス、パスの操作、グラデーション、PDF、テキスト、グリフ、マトリクス操作、アフィン変換などなど。 関数宣言はCGContext.hに有り。 公式リファレンス パスについての詳細 PR |
|
トラックバックURL
|