程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅第四講 Windows圖形開發入門(3)

C#發現之旅第四講 Windows圖形開發入門(3)

編輯:關於C語言

句柄

對Windows編程有 所了解的應該知道,WindowsAPI是一個個C語言樣式的函數,應用程序訪問大部分的操作系統 資源是通過一種叫句柄的整數類型數據。例如程序訪問文件,網絡資源,圖片,創建窗體等 等都會事先調用API函數獲得一個句柄,句柄可以理解成系統資源的唯一編號,應用程序應當 好好保存這個句柄,妥善利用,不用時一定要使用API函數釋放掉。

圖形設備上下文 句柄

應用軟件進行圖形操作時也得使用API函數申請一個圖形設備上下文句柄,以後 所有的圖形操作都是針對這個句柄來進行的,應用軟件完成圖形操作後一定要使用API釋放這 個圖形設備上下文句柄。

圖形設備上下文是一種抽象概念,不限制到具體硬件,因此 Windows內部可以在這個抽象概念上大做文章,圖形設備上下文句柄可以指向顯示器,也可以 指向打印機或其他圖形硬件,這個過程對應用軟件是透明的,因此應用系統在此基礎上能比 較容易的實現所見即所得功能。可以做到一份圖形操作代碼,既可以向計算機屏幕輸出圖形 ,也可以控制打印機輸出圖形,這方便了圖形開發。

軟件設計模式

這種抽象 概念應用到不同的具體應用,是一種軟件設計模式。比如在C#中有一個抽象類 System.IO.Stream , 它表示一個抽象的流的概念,而.Net框架中在這個抽象概念的流上面實 現了各種具體的流,比如針對文件,HTTP資源,內存等等。應用軟件只要編寫代碼將數據保 存到抽象的流中,則同一份代碼,可以同時將數據保存到本地文件,HTTP文件,FTP文件或內 存中。這方便了程序的開發和擴展。

矢量圖形和位圖

概念

圖形開發中 有兩個重要的概念就是矢量圖形和位圖。

所謂矢量圖形,就是使用平面幾何中的點線 面等抽象概念來描述圖形。而位圖是采用大量的密集像素二維數組來描述圖形的。

對 於計算機來說,矢量圖復雜,但數據量小,可無級縮放;而位圖顯示過程簡單,但數據量大 ,放大時顯示效果差。

例子

我們的電腦中存在很多矢量圖和位圖的例子。例 如Flash是比較典型的矢量圖軟件,它生成的圖形文件.swf文件小,放大時顯示質量有保障; 而Windows畫圖板是操作位圖的,生成的圖形文件.bmp文件大,放大時顯示質量差。

還比如Windows字體。Windows字體有位圖字體和TrueType字體,位圖字體是基於位圖概念的 ,而TrueType字體是基於矢量圖形的。目前大部分字體是TrueType字體,我們可以設置這種 字體的樣式,大小,使用TrueType字體的文本即使顯示得非常大,其文本輪廓線條還是很清 晰的。目前少數字體是位圖字體,最常見的是Windows記事本默認使用的Fixedsys字體,這種 字體放大顯示時存在明顯的鋸齒。打印輸出質量不高。

圖形坐標系統

卡笛爾 直角坐標

描述和顯示矢量圖形時需要一個坐標系統,目前采用卡笛爾坐標,也就是具 有X-Y軸的直角坐標。圖形中每個圖形元素都由若干個X-Y坐標值和寬度高度值來確定。比如 一個點用一對XY值來確定位置,而一個線段用兩個XY值來定位,而矩形用一個XY值和寬度高 度值來定位。而圓或橢圓則用一個外切矩形來確定。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved