Time of Update: 2017-02-27
在上一片裡已經向大家介紹了如何使用GDI+繪製簡單的映像,這一片繼續向大家介紹其它一些繪圖知識.1.首先我們來看下上一片中我們使用過的Pen.Pen的屬性主要有: Color(顏色),DashCap(短劃線終點形狀),DashStyle(虛線樣式),EndCap(線尾形狀), StartCap(線頭形狀),Width(粗細)等.我們可以用Pen 來畫虛線,帶箭頭的直線等Pen p = new Pen(Color.Blue, 5);//設定筆的粗細為,顏色為藍色Graphics g = this.
Time of Update: 2017-02-27
最近對GDI+這個東西接觸的比較多,也做了些簡單的執行個體,比如繪圖板,仿QQ截圖等.最早接觸這個類,是因為想做仿QQ截圖的效果.巧的很,學會了如何做截圖後,.NET課堂上老師也正巧要講關於c#繪圖方面的知識,並且我自己又在網上學習金老師的培訓班,也是要用到這個類.在學習中有一些體會,所以準備把這些體會記下來,因為內容比較多,可能我會分幾次寫.廢話不多說了,我們先來認識一下這個GDI+,看看它到底長什麼樣.GDI+:Graphics Device Interface Plus也就是圖形裝置介面,
Time of Update: 2017-02-27
Enum的運算通常涉及到位元運算(AND、OR、XOR),按位元運算, 常使用FlagsAttribute 自訂屬性定義。FlagsAttribute 和 Enum 的準則:只有要對數值執行按位元運算(AND、OR、XOR)時才對枚舉使用 FlagsAttribute 自訂屬性。用 2 的冪(即 1、2、4、8 等)定義枚舉常量。這意味著組合的枚舉常量中的各個標誌都不重疊。請考慮為常用標誌組合建立一個枚舉常量。例如,如果用於檔案 I/O 操作的枚舉包含枚舉常量 Read = 1 和 Write
Time of Update: 2017-02-27
在實際編程工程中,常常遇到這樣的情況:DataTable並不是資料庫中的,或者DataTable尚未寫到資料庫,或者從資料庫中讀出的DataTable已經在本地被改動,又沒有寫回資料庫(可能還要作其他改動),在這些情況下,要查詢DataTable中的資料,強大的SQL語言就派不上用場了。有些.NET程式員採取在資料庫中建立暫存資料表等方法來解決這類查詢問題。而我覺得這種方法不可行,其實只要用.NET類庫中提供的DataView類的強大功能(主要是用它的RowFilter屬性),就能方便地解決這類
Time of Update: 2017-02-27
一、橋樑(Bridge)模式橋樑模式是一個非常有用的模式,也是比較複雜的一個模式。熟悉這個模式對於理解物件導向的設計原則,包括"開-閉"原則(OCP)以及組合/彙總複用原則(CARP)都很有協助。理解好這兩個原則,有助於形成正確的設計思想和培養良好的設計風格。註:《Java與模式》一書認為Bridge模式不是一個使用頻率很高的模式,我不太贊同,我認為Bridge模式中蘊涵了很多設計模式的關鍵思想在裡面,所以我這裡採納了《Design Patterns
Time of Update: 2017-02-27
一、門面(Facade)模式外部與一個子系統的通訊必須通過一個統一的門面(Facade)對象進行,這就是門面模式。醫院的例子用一個例子進行說明,如果把醫院作為一個子系統,按照部門職能,這個系統可以劃分為挂號、門診、劃價、化驗、收費、取藥等。看病的病人要與這些部門打交道,就如同一個子系統的用戶端與一個子系統的各個類打交道一樣,不是一件容易的事情。首先病人必須先挂號,然後門診。如果醫生要求化驗,病人必須首先劃價,然後繳款,才能到化驗部門做化驗。化驗後,再回到門診室。解決這種不便的方法便是引進門面模式
Time of Update: 2017-02-27
一、建造者(Builder)模式建造者模式可以將一個產品的內部表象與產品的產生過程分割開來,從而可以使一個建造過程產生具有不同的內部表象的產品對象。對象性質的建造有些情況下,一個對象會有一些重要的性質,在它們沒有恰當的值之前,對象不能作為一個完整的產品使用。比如,一個電子郵件有寄件者地址、收件者地址、主題、內容、附錄等部分,而在最起碼的收件者地址未被賦值之前,這個電子郵件不能發出。有些情況下,一個對象的一些性質必須按照某個順序賦值才有意義。在某個性質沒有賦值之前,另一個性質則無法賦值。這些情況使
Time of Update: 2017-02-27
代理(Proxy)模式給某一個對象提供一個代理,並由代理對象控制對原對象的引用。代理模式的英文叫做Proxy或Surrogate,中文都可譯成"代理"。所謂代理,就是一個人或者一個機構代表另一個人或者另一個機構採取行動。在一些情況下,一個客戶不想或者不能夠直接引用一個對象,而代理對象可以在用戶端和目標對象之間起到中介的作用。二、代理的種類如果按照使用目的來劃分,代理有以下幾種:遠程(Remote)代理:為一個位於不同的地址空間的對象提供一個局域代表對象。這個不同的地址空間可以
Time of Update: 2017-02-27
一、合成(Composite)模式合成模式有時又叫做部分-整體模式(Part-Whole)。合成模式將對象組織到樹結構中,可以用來描述整體與部分的關係。合成模式可以使用戶端將單純元素與複合元素同等看待。從和尚的故事談起這是小時候我奶奶講的故事:從前有個山,山裡有個廟,廟裡有個老和尚在給小和尚講故事,講的什麼故事呢?從前有個山,山裡有個廟……。奶奶的故事要迴圈多少次,根據你多長時間睡著而定。在故事中有山、有廟、有和尚、有故事。因此,故事的角色有兩種:一種裡面沒有其它角色
Time of Update: 2017-02-27
一、訪問者(Visitor)模式訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。問題提出System.Collection命名空間下提供了大量集合操作對象。但大多數情況下處理的都是同類對象的聚集。換言之,在聚集上採取的操作都是一些針對同類型對象的同類操作。但是如果針對一個儲存有不同類型對象的聚集採取某種操作該怎麼辦呢?粗看上去,這似乎不是什麼難題。可是如果需要針對一個包含不同類型元素的聚集採取某種操作,而操作的細節根據元
Time of Update: 2017-02-27
一、模板方法(Template
Time of Update: 2017-02-27
一、觀察者(Observer)模式觀察者模式又叫做發布-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式、源-監聽器(Source/Listener)模式或從屬者(Dependents)模式。觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態上發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。一個軟體系統常常要求在某一個對象的狀態發生變化的時候,某些其它的對象做出相應的改變。做到這一點的設計方案有很多,但
Time of Update: 2017-02-27
一、命令(Command)模式命令(Command)模式屬於對象的行為模式【GOF95】。命令模式又稱為行動(Action)模式或交易(Transaction)模式。命令模式把一個請求或者操作封裝到一個對象中。命令模式允許系統使用不同的請求把用戶端參數化,對請求排隊或者記錄請求日誌,可以提供命令的撤銷和恢複功能。命令模式是對命令的封裝。命令模式把發出命令的責任和執行命令的責任分割開,委派給不同的對象。每一個命令都是一個操作:請求的一方發出請求要求執行一個操作;接收的一方收到請求,並執行操作。命令
Time of Update: 2017-02-27
概述在軟體系統中,經常面臨著“一系列相互依賴的對象”的建立工作;同時由於需求的變化,往往存在著更多系列對象的建立工作。如何應對這種變化?如何繞過常規的對象的建立方法(new),提供一種“封裝機制”來避免客戶程式和這種“多系列具體對象建立工作”的緊耦合?這就是我們要說的抽象原廠模式。意圖提供一個建立一系列相關或相互依賴對象的介面,而無需指定它們具體的類。模型圖邏輯模型:物理模型:生活中的例子抽象工廠的目的是要提供一個建立一系列
Time of Update: 2017-02-27
在編程中我們常常會遇到“將檔案儲存到資料庫中”這樣一個問題,雖然這已不是什麼高難度的問題,但對於一些剛剛開始編程的朋友來說可能是有一點困難。其實,方法非常的簡單,只是可能由於這些朋友剛剛開始編程不久,一時沒有找到方法而已。下面介紹一下使用C#來完成此項任務。首先,介紹一下儲存檔案到資料庫中。將檔案儲存到資料庫中,實際上是將檔案轉換成二進位流後,將二進位流儲存到資料庫相應的欄位中。在SQL
Time of Update: 2017-02-27
1、聲明一個抽象方法使用abstract關鍵字。2、一個類中可以包含一個或多個抽象方法。3、抽象類別中可以存在非抽象的方法。4、抽象類別不能被直接被執行個體化。5、實現抽象類別用“:”(冒號),實現抽象方法用override關鍵字。6、抽象類別可以被抽象類別所繼承,結果仍是抽象類別。7、抽象方法被實現後,不能更改修飾符。DEMO:public abstract class Person { public abstract void
Time of Update: 2017-02-27
很多圖片處理的演算法從原理上講其實非常簡單,痛點往往在如何去寫演算法實現它,更加難的就是如何去最佳化實現的演算法。雖說我一向認為程式員的效率比程式的效率更重要,但為了等處理一張自己拍攝的數位照片,溜出去買杯奶茶順便再買張彩票回來發現還沒算好,無論如何都是不能忍受的。馬賽克演算法很簡單,說白了就是把一張圖片分割成若干個val *
Time of Update: 2017-02-27
1、比較時間大小的實驗string st1="12:13";string st2="14:14";DateTime dt1=Convert.ToDateTime(st1);DateTime dt2=Convert.ToDateTime(st2);DateTime dt3=DateTime.Now;if(DateTime.Compare(dt1,dt2)>0)msg.Text=st1+">"+st2;elsemsg.
Time of Update: 2017-02-27
同步用戶端通訊端樣本下面的樣本程式建立一個串連到伺服器的用戶端。該用戶端是用同步通訊端產生的,因此掛起用戶端應用程式的執行,直到伺服器返迴響應為止。該應用程式將字串發送到伺服器,然後在控制台顯示該伺服器返回的字串。C#using system;using system.Net;using system.Net.Sockets;using system.Text;public class SynchronousSocketClient {public static void
Time of Update: 2017-02-27
在Windows表單中,通過設定控制項的屬性無法將滑鼠設定為動畫表徵圖的形式,如果要實現該功能,可以通過API函數LoadCursorFromFile和SetClassLong實現。這兩個函數的聲明代碼如下:[DllImport("user32", EntryPoint = "LoadCursorFromFile")]public static extern int LoadCursorFromFile(string