Xamarin.Mac/ビットマップに図形を描画する
Core Graphicsを使ってビットマップに図形を描画したいわけだ。 よくあるCore Graphicsのサンプルだとビューに直接描画ばかりでオフスクリーン(ビットマップ)への描画はあまりないようだ。そのためこの方法で正しいのかは知らない。とりあえず動いてはいる。
// まずオフスクリーンとなるビットマップを作る
var bitmapRep = new NSBitmapImageRep(
planes: IntPtr.Zero,
width: 100,
height: 100,
bps: 8,
spp: 4,
alpha: true,
isPlanar: false,
colorSpaceName: NSColorSpace.DeviceRGB,
rBytes: 0,
pBits: 0
);
// 描画コンテキストを作る
using (var offscreenContext = NSGraphicsContext.FromBitmap(bitmapRep))
{
NSGraphicsContext.CurrentContext = offscreenContext;
var cgContext = NSGraphicsContext.CurrentContext.GraphicsPort;
// 図形を描いてみる
cgContext.BeginPath();
cgContext.MoveTo(0, 0);
cgContext.AddLineToPoint(bitmapRep.Size.Width, bitmapRep.Size.Height);
cgContext.ClosePath();
cgContext.StrokePath();
}
// CGImageを取得する
var cgImage = bitmapRep.CGImage;
// この保存は独自の拡張メソッド
// 「Xamarin.Mac/CGImageをファイルに保存する」を参照
cgImage.Save("/tmp/test.png", MobileCoreServices.UTType.PNG);