2016年2月16日 星期二

C#與EmuCV 學習檔案-安裝EmuCV 、文獻探討(景)

1.在visual studio2013C#下安裝EmuCV
http://vincecc.blogspot.tw/2013/11/c-visual-studio-2012-emucv.html

2.「景」的應用[1]:
分為:

  • 前景:
    • 位於近處,鄰近於攝影者的雙眼。它可以是構圖主體,也可以是附屬配角,端看您如何的應用。
  • 中景:
    • 將攝影者要表達的意念直接傳達給觀看者。常見的攝影主體構圖方式,但偶而也可以是不影響前主體或後主體的補充像素。
  • 後景
    • 座落在圖像的底端,將作品的餘韻留在畫面中。多數是搭配被攝主體或凸顯主體的襯底景物,但是當作主要構圖元素時,可是非常壯觀的。
結構圖:
圖[1]

圖[2]



範例:
圖[3]

圖[4]

圖[5]


---------------------------文獻來源-----------------------------------------------------------------------------------
[1] http://cck0217.myweb.hinet.net/TNGNEW-6.html

----------------------------圖表區-------------------------------------------------------------------------------------
[1] https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtRyPfiN5qXnCpPYihoL2Fb1_CufwmP9PhYpbOrpMG2OUaLVi-HuRdCr-iJiqmvlG_9O-FOEKb339xTH9rIfbAAupQmc1qMs1XJrSv69h5UsDwG98PIRGxHauPZ8Vt9v5mRkiF_2ib5P9Y/s800/2015_05_16_%E9%A2%A8%E6%99%AF%E6%A7%8B%E5%9C%96.png
[2] https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1F-SmCgoOezsHPlBJUOLiLCk_r-lVrS7m5bDIDZ9Xm1wAt_BPzFGoDcApOq6a56EUeyx4V3CBjC_RQ6-F5JLzsI_D1o8lJl7OkaDY-W0ulh0vp64CEWLN1kR0goz2RE4A8s8XlPgr-jW1/s800/2015_05_16_%E9%A2%A8%E6%99%AF%E6%A7%8B%E5%9C%962.png
[3] http://img5.ph.126.net/DPhoAh3ys9mfSWdfN_vQUg==/6598233049958686465.jpg
[4] http://www.asus.com/zentalk/tw/data/attachment/forum/201510/14/183618m0mgp3oz0663grp0.png
[5] http://cdn2.digiphoto.techbang.com.tw/system/images/39133/original/4ce00d903c4175fe23eaed5c091cadb7.jpg?1347948750

2016年2月8日 星期一

C#多型

1.多型(Polymorphism):

    • 稱同名異式
    • 允許在程式中使用名稱相同的方法和屬性
    • 若要設計多型,子類別就必須覆寫父類別同名稱的方法和屬性,接著再使用父類別的物件參考來選擇所要執行子類別物件的實體方法。
2.覆寫:
    • STEP1:
      • 將父類別的方法和屬性宣告為virtual:
           表示父類別被子類別同名的方法覆蓋
    • STEP2:
      • 將子類別的方法或屬性宣告為override(覆寫):
           表示要重新定義父類別的方法
    • base:
      • base.方法([引數串列]);
        :呼叫父類別的方法
      • base.屬性;
        :呼叫父類別的屬性
3.動態繫結:
    • 程式進入執行階段時,物件參考才決定要執行的方法
    • 方法:使用父類別的物件參考來選擇所要執行的子類別物件的實體方法
4.抽象類別: 
    • 無法使用new來建立實體物件
    • 可定義抽象方法或存取子
    • 使用abstract修飾詞:
      ex.
      public abstract void Answer();






C#繼承、靜態成員

1.繼承:

    • 語法:
      class 子類別:父類別     //子類別繼承自父類別
      {
         ......................
      }
    • ex.
      //定義 Employee員工類別
      class Employee
      {
          屬性A
          方法A
      }
      //Manager 經理類別繼承自Employee員工類別
      class Manager:Employee
      {
           屬性B
           方法B
      }
2.類別成員的存取限制:
    • public:
      成員的存取沒有限制,屬公開層級。
    • private:
      能在自身類別內做存取的動作,屬私有層級,外界無法使用。
    • protected:
      除了讓自身類別存取外,也可以讓子類別做存取,屬保護層級。
3.靜態(static)成員成員:
    • 使用static宣告出來的成員不需要經過new敘述來建立物件實體就可以直接透過類別來使用。
    • static成員在記憶體中只會儲存一份,類別所產生的物件都可以一起共用此static成員。
    •  static方法中只能存取類別中定義的static成員,不能存取非static成員。

2016年2月6日 星期六

C#如何建立物件與類別、命名空間、事件

1.如何建立類別(class):

    • 定義在哪都可以
    • 不可定義在namespace外(類別定義一定是全域性宣告)
    • 不能放在函式中
    • ex.
----------------------------------------------------
namespace ch6_2
{
    class c1
    {

    }
    class c2
    {
        static void Main(string[] args)
        {

        }
    }
}
------------------------------------------------------

2.命名空間(namespace):
    • 有效的將眾多物件根據他的功用可有效的分類
    • ex.
----------------------------------------------------
namespace ch6_3
{
    class c1
    {

    }
}
namespace ch6_4
{
    class c2
    {

    }
}
namespace ch6_5
{
   
    class c3
    {
        static void Main(string[] args)
        {

        }
    }
}
----------------------------------------------------------
3.如何建立屬性:
    • 直接使用public變數:
      • ex.
--------------------------------------------------------
class Car
{
    public int Speed;
}
class Program
{
      static void Main(string[] args)
    {
       Car Benz=new Car;
       Benz.Speed=500;
     }
}
---------------------------------------------------------
缺點:Speed值會被改變,例如允許負數
    • 使用get 及 set存取子:
    • 可建立唯讀唯寫屬性
      • ex.
--------------------------------------------------------
class Car
{
    private int Speed;

public int GetSpeed()
{
    return Speed;
}
public void SetSpeed(int vSpeed)
{
    if(vSpeed<0)vSpeed=0;
    if(vSpeed>200)vSpeed=200;
    Speed=vSpeed;
}
}
class Program
{
      static void Main(string[] args)
    {
       Car Benz=new Car;
       Benz.SetSpeed(500);//結果因為超過200所以會顯示結果為200
     }
}
--------------------------------------------------------
4.如何建立事件:
    • 建立 delegate 委派型別
      • 可以指向方法的參考指標,delegate 型別可以呼叫物件的方法,已傳回特定資訊
      • ex.
        ---------------------------------------------------
        delegate void EventDanger(int vSpeed);
        ---------------------------------------------------
    • 建立 event敘述宣告事件
      • public event DangerEvent Danger;
      • 名稱為 Danger 屬於 DangerEvent delegate 型別
    • 如何觸動事件?
      • if(Danger!=null)Danger(value);
    • 如何定義事件?
      • 在button內
    • 指定物件發生事件所要處理的方法:
      • ex.
----------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleEvent1
{
    delegate void DangerEvent(int vSpeed); // 宣告delegate型別

    class Car
    {
        private int _speed;
        public event DangerEvent Danger; // 宣告事件
        public int Speed // 定義 Speed 屬性
        {
            get
            {
                return _speed;
            }
            set
            {
                if (value > 200)
                {
                    if (Danger != null) Danger(value); // 啟動事件
                }
                _speed = value;
            }
        }
    }
    class Program
    {
        static void TooFast(int vSpeed)
        {
            Console.WriteLine("你的目前的速度是 {0},超過 200,請減速 !!!", vSpeed);
        }

        static void Main(string[] args)
        {
            Car Benz = new Car();
            // 指定 Danger 事件由 TooFast 方法來處理
            Benz.Danger += new DangerEvent(TooFast);
            Benz.Speed = 300;
            Console.Read();
        }
    }
}
-------------------------------------------------------------------------------------------

5.堆疊
參閱:click

C#物件與類別

1.物件(Object)與類別:

    • 物件具有屬性:
      • ex.
        David.Tall = 80;
        label1.Text = "Hello";
        label1.BackColor=Color.Yellow;
    • 物件具有方法:
      • ex.
        Car1.Move(100,200);
    • 物件要有訊息與事件:
      • ex.
        button1.Click+=new EventHandler(button1_Click);
        private void button1_Click(object sender, EventArgs e)
        {
            ......  //敘述區塊
        }
    • 物件要能被識別:
      • Car1.Fordward(); //Car1前進
        Car2.Backward(); //Car2後退
2.物件導向應用程式設計特性具有:
    • 抽象化:
      • 影片:

      • 程式碼:
-------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ch6_1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        //函數
        private void Draw(int vType)
        {
            Graphics g;
            Pen p = new Pen(Color.Red);//建立一支紅色筆
            g = this.CreateGraphics();//取得畫布
            g.Clear(Color.White);//清除畫布
            switch(vType)
            {
                case 0:
                    g.DrawEllipse(p, 90, 30, 90, 30);
                    break;
                case 1:
                    g.DrawLine(p, 90, 50, 180, 100);
                    break;

                case 2:
                    g.DrawArc(p, 90,30,90,90,0,250);
                    break;


            }
        }

        private void btnCircle_Click(object sender, EventArgs e)
        {
            Draw(0);
        }

        private void btnLine_Click(object sender, EventArgs e)
        {
            Draw(1);
        }

        private void btnArc_Click(object sender, EventArgs e)
        {
            Draw(2);
        }
    }
}
--------------------------------------------------------------------------
    • 封裝:
      • 資料結構和操作資料結構的所有方法封裝在物件類別當中,外界無法存取該物件類布的資料結構
    • 繼承:
      • 父類別、子類別
    • 多型:
      • 物件可使用相同方法來操作不同類型的物件
    • 動態繫結:
      • 編譯器在進行編譯程式的階段時不將物件與方法聯繫在一起,而是將物件ㄤ法的位置建立成一個虛擬表格,在程式執行階段時再由虛擬表格去判斷該呼叫哪個物件的方法。

C#視窗應用程式範例

1.影片:

2.程式碼:
--------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ch5_1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            IbShow.Text = "";
        }

        private void btnOK_Click(object sender, EventArgs e)//OK按下
        {
            IbShow.Text = "Hello " + txtName.Text;
            IbShow.BackColor = Color.Yellow;
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            Application.Exit();//結束視窗
        }
    }
}
----------------------------------------------------------------------------

2016年2月5日 星期五

C#方法多載與方法間傳遞陣列

1.方法間傳遞陣列:

    • ex.
       namespace Con
      {
      class Program
      {
      static int GetMax(ref int[] ary)
      {
          ......
          return max;
      }
      ......
      static void Main(string[]args)
      {
         int[] tAry=new int[]{12,15,38,21,25};
         Concole.WriteLine("陣列最大值:{0}",GetMax(ref tAry));
      }
      }
      }
1.方法多載:
  • x=1,y=2,z=3
    • 當x,y兩個引數都是整數時呼叫此方法:
      • ex.
        static int sum(int x,int y)
        {
               return(x+y);//3
        }
    • 當x,y,z三個引數都是整數時呼叫此方法:
      • ex.
        static int sum(int x,int y,int z)
        {
               return(x+y+z);//6
        }
  • x='a',y='b',z='c'
    • 當x,y兩個引數都是字串時呼叫此方法:
      • ex.
        static int sum(string x,string y)
        {
               return(x+y);//ab
        }
    • 當x,y,z兩個引數都是字串時呼叫此方法:
      • ex.
        static int sum(string x,string y,string z)
        {
               return(x+y+z);//abc
        }