Xamarin.Mac/ビットマップに図形を描画する

提供: MonoBook
ナビゲーションに移動 検索に移動

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

関連項目