忍者ブログ
  • 2024.10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 2024.12
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/11/23 06:40 】 |
CoreGraphics描画命令いろいろ
描画命令のいろいろを書いていきます。

コンテキストを表す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
【2011/03/18 18:23 】 | iPhone | 有り難いご意見(0) | トラックバック()
<<CoreGraphicsでフォント描画 | ホーム | CoreGraphicsで自前のコンテキストを使う>>
有り難いご意見
貴重なご意見の投稿














虎カムバック
トラックバックURL

<<前ページ | ホーム | 次ページ>>