パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

mono C#で画像描画

2017-03-20 | コンピュータ
MonoDevelopをつかって画像描画してみました。参考サイトのソースをシンプルにしただけなのですが
最初はライブラリのつなぎとかでいつものようにはまりました。



<開発環境>

ubuntu16.04
monodevelop5.10
gtkを少々



<実行環境作成>

monodevelopをUbuntu Softwareからインストールして起動
gtk# 2.0プロジェクトを新規で作成
MyDrawingArea.csを追加
ソースを入れる
ソリューションの中にある参照を編集してusingで利用しているパッケージを追加
ここではSystem.Drawingとgtk-dotnetを追加
namespaceを揃える
プログラムの実行は左上隅の三角マークです。

プログラムの中身は参考サイトをちょっと簡単にしています。



<開発画面>





<実行画面>





<ソースリスト>

Program.cs
using System;
using Gtk;

namespace mono2
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            Application.Init ();
            MainWindow win = new MainWindow ();
            win.ShowAll ();
            Application.Run ();
        }
    }
}


MainWindow.cs
using System;
using Gtk;

namespace mono2
{
    public partial class MainWindow: Gtk.Window
    {
        MyDrawingArea da;
        Gtk.VBox vbox;
        public MainWindow () : base (Gtk.WindowType.Toplevel)
        {
            this.da = new MyDrawingArea ();
            this.vbox = new Gtk.VBox ();
            this.vbox.PackStart (this.da);
            this.Add (this.vbox);
            Build ();
        }

        protected void OnDeleteEvent (object sender, DeleteEventArgs a)
        {
            Application.Quit ();
            a.RetVal = true;
        }
    }
}


MyDrawingArea.cs
using System.Drawing;
using System;
using Gtk;

namespace mono2
{
    public class MyDrawingArea : Gtk.DrawingArea
    {
        int width;
        int height;
        public MyDrawingArea ()
        {
            this.SizeAllocated += delegate (object o, SizeAllocatedArgs args)
            {
                this.width = args.Allocation.Width;
                this.height = args.Allocation.Height;
            };
            this.ExposeEvent += delegate (object o, ExposeEventArgs args)
            {
                using (System.Drawing.Graphics g = Gtk.DotNet.Graphics.FromDrawable (args.Event.Window))
                {
                    using (Pen p1 = new Pen (Color.Red, 10.0f))
                    using (Pen p2 = new Pen (Color.SkyBlue, 20.0f))
                    using (StringFormat sf = new StringFormat ())
                    using (Font font = new Font ("Serif", 20.0f))
                    {
                        sf.Alignment = StringAlignment.Near;
                        sf.LineAlignment = StringAlignment.Near;
                        g.DrawArc (p1, 100, 50, 200, 150, 0, 350);
                        g.DrawLine (p2, 30, this.height-30, this.width-30, this.height-30);
                        g.DrawString ("こんにちは世界",
                            font,
                            Brushes.Green,
                            new PointF (110,110),  // 構造体
                            sf);
                    }
                }
                args.RetVal = false;
            };
        }
    }
}



<参考サイト>
Gtk#でSystem.Drawing.Graphicsクラスの描画処理を用いる

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。