Xamarin.MacでCoreGraphicsの基本的な使い方
CGContextを取得する[編集 | ソースを編集]
NSGraphicsからCGContextを取得する。
var nsContext = NSGraphicsContext.CurrentContext;
var cgContext = NSGraphicsContext.CurrentContext.GraphicsPort;
線幅、線色、塗る潰し色[編集 | ソースを編集]
色指定はRGBだが一般的な0〜255ではなく0.0〜1.0の浮動小数点で指定する。 色指定はCMYKでもでき、こちらも0.0〜1.0の範囲の浮動小数点となる。
cgContext.SetLineWidth(2.0f);
cgContext.SetStrokeColor(red: 0.0f, green: 0.0f, blue: 0.0f, alpha: 1.0f);
cgContext.SetFillColor(cyan: 1.0f, magenta: 1.0f, yellow: 1.0f, black: 1.0f, alpha: 1.0f);
四角形を描く[編集 | ソースを編集]
画面初期化でよく使う四角形である。
cgContext.SetFillColor(1.0f, 1.0f, 1.0f, 1.0f);
cgContext.FillRect(dirtyRect);
直線を描く[編集 | ソースを編集]
よくあるMoveToとLineToである。似たような描画システムではLineToで描画されるのが一般的だが、CoreGraphicsでは最後にStrokePathを呼ばないと描画されない。
cgContext.MoveTo(100, 100);
cgContext.AddLineToPoint(200, 200);
cgContext.StrokePath();
放射状の線を描く[編集 | ソースを編集]
放射状の線を描くカスタムビュー。カスタムビューの詳細は「Xamarin.Mac/カスタムコントロールを使用する」を参照。 やってることは線を描くのと同じである。
public class RadialLineView : NSView
{
//〜〜〜省略〜〜〜
public override void DrawRect(CGRect dirtyRect)
{
base.DrawRect(dirtyRect);
var context = NSGraphicsContext.CurrentContext.GraphicsPort;
var length = dirtyRect.Width / 2;
var divide = 90;
for (int i = 0; i < divide; i++)
{
var x1 = dirtyRect.X + (dirtyRect.Width / 2);
var y1 = dirtyRect.Y + (dirtyRect.Height / 2);
context.MoveTo(x1, y1);
var x2 = (nfloat)(Math.Cos(2 * Math.PI / divide * i) * length ) + x1;
var y2 = (nfloat)(Math.Sin(2 * Math.PI / divide * i) * length ) + y1;
context.AddLineToPoint(x2, y2);
context.StrokePath();
}
}
}
丸を描く[編集 | ソースを編集]
丸は四角形で指定する。 丸だけはStrokePathやFillPathではなくStrokeEllipseInRectとFillEllipseInRectなっている。
cgContext.SetLineWidth(2.0f);
cgContext.SetStrokeColor(0.0f, 0.0f, 0.0f, 1.0f);
cgContext.StrokeEllipseInRect(dirtyRect);
関連項目[編集 | ソースを編集]
- CoreGraphics
- Xamarin.Mac/CGImageをNSImageに変換する
- Xamarin.Mac/NSViewの描画内容をファイルに保存する
- Xamarin.Mac/NSOpenGLViewを使う