數學運算:

Math.Abs(a):其中a可為浮點數或整數。該函式回傳a的絕對值。

Math.Max(a,b):其中ab可為浮點數或整數。該函式回傳ab兩者比較後的最大值。

Math.Min(a,b):其中ab可為浮點數或整數。該函式回傳ab兩者比較後的最小值。

Math.Round(a,b):其中a為浮點數、b為整數。該函式回傳a在小數點後第b位之四捨五入值。b可不寫,若不寫,則該函式將a四捨五入至整數後回傳。

Math.Ceiling(a):其中a為浮點數。該函式將a無條件進位至整數後回傳。

Math.Floor(a):其中a為浮點數。該函式將a之小數點部分無條件捨去後回傳。

Math.Pow(a,b):其中ab可為浮點數或整數。該函式回傳ab次方。

Math.Exp(a):其中a可為浮點數或整數。該函式回傳exp(2.718)a次方。

Math.Log(a,b):其中ab可為浮點數或整數。該函式回傳「以b為底數、以a為真數的log值」。

Math.Log(a):其中a可為浮點數或整數。該函式回傳「以exp(2.718)為底數、以a為真數的log值」。

Math.Cos(a):其中a可為浮點數或整數。該函式回傳cos(a)之值。其中a之單位為徑度。

Math.Sin(a):其中a可為浮點數或整數。該函式回傳sin(a)之值。其中a之單位為徑度。

Math.Tan(a):其中a可為浮點數或整數。該函式回傳tan(a)之值。其中a之單位為徑度。

 

 

亂數:

Random 隨機變數名稱 = new Random(Guid.NewGuid().GetHashCode());

隨機變數名稱.Next(N):其中N為整數。該函式回傳一個整數亂數x,且0 <= x < N

隨機變數名稱.Next(N1,N2):其中N1N2為整數。該函式回傳一個整數亂數x,且N1 <= x < N2

 

 

 

上一篇:stopwatch計時器

下一篇:tuple

按此前往C#完整教學目錄

文章標籤

埃伯 發表在 痞客邦 留言(0) 人氣()

用來計算程式執行時間的物件:Stopwatch物件

欲使用Stopwatch物件,需在程式碼開頭寫下:

using System.Diagnostics

(1) 宣告方式:

Stopwatch Stopwatch物件名稱 =  new Stopwatch();

(2) Stopwatch物件常用的成員:

Stopwatch物件名稱.IsRunning:一個bool。若Stopwatch物件正在計時則為true,反之則為false

Stopwatch物件名稱.Elapsed:一個timespan物件。表示該Stopwatch物件在計時開始到計時結束時,總共記錄的時間。該物件常用成員有:

Stopwatch物件名稱.Elapsed.Milliseconds:一個int。表示總共記錄的時間(以毫秒為單位)

Stopwatch物件名稱.Elapsed.Seconds:一個int。表示總共記錄的時間(以秒為單位)

(3) Stopwatch物件常用的成員函式:

Stopwatch物件.Reset():無回傳值。令該Stopwatch物件之計時器歸零。

Stopwatch物件.Start():無回傳值。令該Stopwatch物件開始計時。

Stopwatch物件.Stop():無回傳值。令該Stopwatch物件停止計時。

 

 

 

上一篇:影像(image)

下一篇:數學運算

按此前往C#完整教學目錄

文章標籤

埃伯 發表在 痞客邦 留言(0) 人氣()

()、影像

最常見的影像(image),就是「二進位影像」。凡是副檔名為bmp的影像檔,就是個二進位影像檔。二進位影像在C#中是個類別物件。

 

1.顏色物件:

(1) 建立一個顏色物件:

(1-1) Color 變數名稱 = Color.FromArgb(int R,int G,int B);

其中,RGB0~255的整數,表示該顏色的R值、G值、B值。A值預設為255

(1-2) Color 變數名稱 = Color.FromArgb(int A,int R,int G,int B);

其中,ARGB0~255的整數,表示該顏色的A值、R值、G值、B值。

(2) 顏色物件的成員:

顏色.A:該顏色的A(又稱alpha值,或「不透明度」),為0~255的整數。數字越高越不透明,越低越透明。

顏色.R:該顏色的R值,為0~255的整數。

顏色.G:該顏色的G值,為0~255的整數。

顏色.B:該顏色的B值,為0~255的整數。

2.位元圖片:

(1) 位元圖片物件的建構式:

(1-1) Bitmap 變數名稱=new Bitmap(int X,int Y);   

其中,XY都是正整數。表示建立一個空白的位元圖片(即其每一個像素的ARGB值都是0)。其寬度是X個像素,高度是Y個像素。例如:

Bitmap p1=new Bitmap(100,100);

(1-2) Bitmap 變數名稱=new Bitmap(string 路徑);

路徑中讀取位元圖片。

(1-3) Bitmap 變數名稱=new Bitmap(Image 影像);   

表示將該影像給存入此位元圖片。那麼,位元圖片的每一個像素的ARGB值、以及寬度和高度,都和該影像是一樣的。例如:

Image A=Image.FromFile("D:/User-Data/Desktop/f1.jpg");

Bitmap p1=new Bitmap(A);

(2) 位元圖片的寬與高:

位元圖片.Width為該圖片的寬,位元圖片.Height為該圖片的高。

(3) 取得位元圖片中,某一個像素點的顏色:

位元圖片.GetPixel(int X,int Y);

可以回傳一個顏色物件,該顏色是此位元圖片中,x座標為Xy座標為Y的像素之顏色。

註:位元圖片的像素座標,是從0開始數起。也就是說,一張寬100、高100的位元圖片,像素的XY座標都是從0~99

(4) 設定位元圖片中,某一個像素點的顏色:

位元圖片.SetPixel(int X, int Y, Color C);

在此位元圖片中,設定x座標為Xy座標為Y的像素其顏色為C

(5) 顯示圖片於picturebox上:

pictureBox1.Image = 位元圖片名稱;

範例如:

Bitmap B = new Bitmap(100, 100);

for (int i = 0; i < B.Width; i++)

{

for (int j = 0; j < B.Height; j++)

{ B.SetPixel(i, j, Color.FromArgb(i, j, 0)); }

}

pictureBox1.Image = B;

執行後顯示:

image

(6) 將此位元圖片存檔:

位元圖片.Save(檔案路徑, 檔案編碼格式);

其中,檔案路徑的資料形態是字串。檔案編碼格式則是個System.Drawing.Imaging.ImageFormat類別物件,這個物件可以決定圖檔要用哪種編碼格式來存檔。此物件常用的寫法如下:

System.Drawing.Imaging.ImageFormat.Bmp  //表示用Bmp檔的編碼方式存檔

System.Drawing.Imaging.ImageFormat.Jpeg  //表示用Jpeg檔的編碼方式存檔

System.Drawing.Imaging.ImageFormat.Gif  //表示用Gif檔的編碼方式存檔(Gif檔可顯示透明度、動態圖檔)

System.Drawing.Imaging.ImageFormat.Png  //表示用Png檔的編碼方式存檔(Png檔可顯示透明度)

System.Drawing.Imaging.ImageFormat.Icon  //表示將檔案存成一個windows Icon檔案,也就是桌面圖示的檔案

註一:若檔案編碼格式不寫,則預設Png檔的編碼方式存檔。

註二:檔案編碼格式乃是檔案的本質,不因檔案路徑中副檔名而改變。也就是說,若今有一個圖檔,其檔案編碼格式System.Drawing.Imaging.ImageFormat.Png,但檔案路徑"xxx.bmp ",則其仍然是個Png檔,只不過檔名是xxx.bmp。如此一來造成此檔案「名不符實」,會產生使用上的誤解,故要小心!

 

 

上一篇:檔案內容的讀寫(streamreader、streamwriter、files)

下一篇:stopwatch計時器

按此前往C#完整教學目錄

文章標籤

埃伯 發表在 痞客邦 留言(0) 人氣()

讀:電腦利用「指標」來從檔案讀取資料,指標的意義等同於「讀取位置」。比如,今有個文字檔案,內容是:abcde,一開始指標在檔案開頭的位置(a處,用數字0代表該指標所在位置),每讀取一個字元,指標就往後進一個字元(例如連續讀取了abc3個字元後,指標就在d處,用數字3代表該指標所在位置)。使用者可以利用程式碼來操控指標,以方便讀取自己所想要讀取的檔案內容。

寫:一個完整的「將字串寫入檔案」的過程,須依序包含四個步驟:建立串流物件à利用串流物件將字串寫入緩衝區(buffer)à將緩衝區的字串寫入檔案à關閉串流物件。串流物件有FileStream物件、StreamReader物件、StreamWriter物件。FileStream物件可用來讀和寫,StreamReader物件可用來讀取,StreamWriter物件可用來寫入。一一介紹如下。

(1) 將檔案資料看做位元組(byte)的形式,來讀寫它:

須利用到FileStream物件。FileStream物件的宣告方式:

FileStream 物件名稱 = new FileStream(String "路徑", FileMode FileMode物件 [ ,FileAccess FileAccess物件])

(1-1) FileStream物件常用的成員:

物件名稱.CanRead:一個bool。若為true表示該FileStream物件可對路徑上的檔案進行讀取,若為false則否。可否對檔案進行讀取,和該FileStream物件的FileMode物件之設定有關。

物件名稱.CanWrite:一個bool。若為true表示該FileStream物件可對路徑上的檔案進行寫入,若為false則否。可否對檔案進行寫入,和該FileStream物件的FileMode物件之設定有關。

物件名稱.Length:一個long(長整數)。代表路徑上檔案的byte數目。

物件名稱.Position:一個long(長整數)。代表該FileStream物件在路徑上檔案中,其指標的位置。

(1-2) FileStream物件常用的成員函式:

物件名稱.Seek(long N, SeekOrigin 參考點):回傳一個long。此函式可以將指標的位置設定為相對於參考點而言、往後進Nbyte的位置,並將設定完成後的位置回傳。參考點是一個SeekOrigin物件,SeekOrigin物件可用以下方法呼叫:

SeekOrigin.Begin:表示將參考點設在檔案的開頭。

SeekOrigin.Current:表示將參考點設在當前的指標位置。

SeekOrigin.End:表示將參考點設在檔案的末尾。

物件名稱.ReadByte():回傳一個int。此函式可以從當前的指標位置讀取一個byte,並將這個byte轉為整數、以int型態儲存而回傳。使用前提是該FileStream物件的FileAccess物件要允許讀取才行。而因英文、數字、標點符號均是一個byte,而中文卻是兩個byte,故此函式無法順利讀取中文。而讀取出來的int須轉化為字元才能顯現成文字,做法如:

cahr this_char = (char)物件名稱.ReadByte();

物件名稱.WriteByte(byte N):無回傳值。此函式可以從當前的指標位置,將一個byte型別的變數N(byte型別的變數,其允許值為0~255)轉化為字元,而直接寫入檔案。使用前提是該FileStream物件的FileAccess物件要允許寫入才行。

物件名稱.Close():無回傳值。此函式可以關閉該FileStream物件。FileStream物件使用完後建議關閉,以免占用系統資源。

(2) 將檔案資料看做文字(char(字元)string(字串))的形式,來讀取它:

須利用到一個StreamReader物件。StreamReader物件常用的宣告方式為:

StreamReader 變數名稱= new StreamReader (String "路徑" [ ,Encoding 編碼]);

可將讀取路徑上檔案的資料。

StreamReader 變數名稱= new StreamReader (FileStream FileStream物件[ ,Encoding 編碼]);

可將讀取FileStream物件之檔案的資料。

編碼,即是說以何種編碼讀取檔案內容文字,是個Encoding物件。Encoding物件的呼叫方法如下:

Encoding.ASCII:表示利用ASCII編碼來讀取檔案內容文字,ASCII編碼以一個byte作為一個字元。

Encoding.Unicode:表示利用Unicode編碼來讀取檔案內容文字。

Encoding.UTF8:表示利用UTF8編碼來讀取檔案內容文字,UTF8編碼一至四個byte作為一個字元(字元的byte數目乃是可變的)。這是預設值。

Encoding.GetEncoding("Big5")表示利用Big5編碼來讀取檔案內容文字。Big5用於為某些老舊的繁體中文檔案編碼。

(2-2) StreamReader物件常用的成員:

物件名稱.EndOfStream:一個bool。若為true,表示指標已在檔案的最末尾。若為false則否。此成員通常搭配while迴圈,來控制檔案的讀取內容。

(2-2) StreamReader物件常用的成員函式:

物件名稱.Read():回傳一個int(代表該字元之編碼的數值),並將指標往後進一個字元。若已讀至檔案末尾而無字元可讀,則回傳-1。可將該編碼數值轉換成字元,如:

char t = (char)物件名稱.Read();

則這個 t 就會是該字元。

物件名稱.Peek():回傳一個int(代表該字元之編碼的數值),不過並不移動指標。若已讀至檔案末尾而無字元可讀,則回傳-1。可將該編碼數值轉換成字元,和將物件名稱.Read()轉換為字元的方法相同。

物件名稱.ReadLine():回傳一個String。此函式在檔案內容中,以當前指標所在位置為出發點開始讀取,直到碰上第一個斷行字元為止。並將所讀取的內容文字回傳。

物件名稱.ReadToEnd():回傳一個String。此函式在檔案內容中,以當前指標所在位置為出發點開始讀取,直到檔案的末尾為止。並將所讀取的內容文字回傳。

物件名稱.Close():無回傳值。此函式會關閉該StreamReader物件。StreamReader物件在使用完後建議關閉,以免占用系統資源。

(3) 將檔案資料看做文字(char(字元)string(字串))的形式,來寫入它:

須利用到一個StreamWriter物件。StreamWriter物件最常用的宣告方式為:

StreamWriter 變數名稱= new StreamWriter(string "路徑" [,bool 添寫參數]);

可將資料寫入路徑上的檔案。其中,添寫參數若為true,表示寫入的方法是「添寫(保留原有資料,並從檔案末尾將新資料添寫進去)」而非「覆寫」,若為false則為覆寫。預設值為false

StreamWriter 變數名稱= new StreamWriter(FileStream FileStream物件);

可將資料寫入FileStream物件上的檔案。

(3-1) StreamWriter物件的常用成員函式有:

物件名稱.Write( 變數 ):無回傳值。其中,變數可以是字串、數字型態的變數、bool型態的變數、甚至可以是物件。此函式可將非字串型態的變數轉換成字串,並且寫入緩衝區。

物件名稱.WriteLine( 變數 ):無回傳值。此函式相當於在執行物件名稱.Write( 變數 )之後,再將斷行字元寫入緩衝區。

物件名稱.Flush():無回傳值。此函式可將緩衝區的資料寫入檔案。

物件名稱.Close():無回傳值。此函式可將緩衝區的資料寫入檔案,然後關閉檔案。StreamWriter物件在使用完後建議關閉,以免占用系統資源。

 

※ 簡單範例(檔案開頭已有加入using System.IO;這一行)

private void Form1_Load(object sender, EventArgs e)

{

      DirectoryInfo main_dir = new DirectoryInfo("main_dir");

      if (!main_dir.Exists)

      {

            main_dir.Create();

            FileInfo this_file = new FileInfo("main_dir\\file1.txt");

            FileStream this_file_stream = this_file.Create();

            StreamWriter this_file_writer = new StreamWriter(this_file_stream);

            this_file_writer.WriteLine("現在時間是:" + DateTime.Now);

            this_file_writer.Close();

      }

      else

      { textBox1.Text = "已存在main_dir資料夾!"; }

}

程式執行後,在該專案的專案名稱\bin\Debug」路徑下就會出現一個main_dir資料夾,其中有個file1.txt文字檔,其中就寫著程式執行時的時間。

 

 

上一篇:檔案的處理

下一篇:影像(image)

按此前往C#完整教學目錄

文章標籤

埃伯 發表在 痞客邦 留言(0) 人氣()

外部檔案的處理:

其利用到一個FileInfo物件。此物件代表著作業系統中某一個檔案路徑的相關資訊。該物件的宣告方法為:

FileInfo 物件名稱 = new FileInfo("路徑");

其中,路徑可為絕對路徑或相對路徑。

(1) FileInfo物件常用的成員:

物件名稱.FullName:一個string。代表該路徑絕對路徑形式。

物件名稱.Exists:一個bool。若為true,代表該路徑上已有檔案存在。若為false則代表該路徑上沒有徑物存在、或存在的徑物不是檔案。

物件名稱.CreationTime:一個DateTime物件。代表該路徑上之檔案創立的時間。若該路徑上之徑物是資料夾,也會顯示其創立的時間。但若該路徑上沒有徑物,則其時間會是1601/1/1 08:00:00

物件名稱.LastAccessTime:一個DateTime物件。代表該路徑上之檔案最近一次被存取的時間。若該路徑上之徑物是資料夾,也會顯示其最近一次被存取的時間。但若該路徑上沒有徑物,則其時間會是1601/1/1 08:00:00

物件名稱.Directory:一個DirectoryInfo物件。代表該路徑之父目錄的相關資訊。

物件名稱.Name:一個string。代表該路徑上之徑物名。

物件名稱.Length:一個long(長整數)。若該路徑上的徑物不是檔案,在存取此成員時會出錯。若該路徑上的徑物是檔案,則回傳該檔案的大小(Bytes為單位)

(2) FileInfo物件的常用成員函式:

物件名稱.Create():回傳一個FileStream物件。若路徑上沒有徑物,此函式會建立此檔案。而若路徑上的徑物是檔案,此函式會覆寫此檔案。無論是建立新檔還是覆寫舊檔,都會回傳檔案的FileStream物件。惟若此路徑上的徑物是資料夾,則此函式會出錯。

物件名稱.Delete():無回傳值。若路徑上的徑物是檔案,則此函式會刪除此檔案。而若路徑上的徑物不是檔案,則此函式會出錯。又若路徑上沒有徑物,則此函式不作用。

物件名稱.MoveTo(String "新路徑"):無回傳值。將該檔案從原本的路徑移至新路徑上。但若新路徑上已經有徑物存在,則此函式會出錯。

物件名稱.CopyTo(String "新路徑", [bool 覆寫參數]):回傳一個FileInfo物件。此函式將該檔案複製到新路徑上,並回傳該複製完之檔案的FileInfo。若覆寫參數true,則允許此函式覆寫新路徑上的徑物,若覆寫參數false,則在新路徑上已有徑物的情況下執行此函式會出錯。覆寫參數的預設值是false

物件名稱.Open(FileMode FileMode物件 [ ,FileAccess FileAccess物件]):可開啟此檔案,並回傳此檔案的FileStream物件。其中,FileMode物件是用來設定檔案的開啟模式;FileAccess物件物件是用來設定檔案所被允許的存取行為。

(-1) FileMode物件的呼叫方法:

FileMode.Open:路徑上若不存在檔案,會出錯。若存在檔案,則開啟該檔案。

FileMode.Create:路徑上若不存在檔案,則建立該檔案。若存在檔案,則覆寫該檔案。

FileMode.OpenOrCreate:路徑上若不存在檔案,則建立該檔案。若存在檔案,則保留該檔案並將它開啟。

FileMode.Truncate:路徑上若不存在檔案,會出錯。若存在檔案,則將檔案的內容文字全部刪除。

FileMode.Append:路徑上若不存在檔案,則建立該檔案。若存在檔案,則將指標移至該檔案的末尾(關於「指標」,請看4.

(-2) FileAccess物件的呼叫方法:

FileAccess.Read:以此方法開啟檔案之後,檔案只能讀不能寫。

FileAccess.Write:以此方法開啟檔案之後,檔案只能寫不能讀。

FileAccess.ReadWrite:以此方法開啟檔案之後,檔案可寫亦可讀。


 

 

 

上一篇:路徑的處理

下一篇:檔案內容的讀寫:streamreader、streamwriter、files

按此前往C#完整教學目錄

文章標籤

埃伯 發表在 痞客邦 留言(0) 人氣()