??????前言: 本文章抄襲自本人剛剛買的《ASP.NET 3.5從入門到精通》這本書,此書介紹在 http://www.china-pub.com/44991 ?,本文章95%與此書的內容完全一樣,另5%是我改正一些失誤以后加上去的,該書原示例代碼只能運行在IE核心的瀏覽器上,非IE核心瀏覽器上運行會出現些顯示問題,本人更改了其中的一些代碼。本文章經歷昨晚本人五個小時的手打而成(且還未打完,下班回去繼續打,想不到我的打字速度退化得這么快,郁悶?。。。?,俗話說:好記性不如爛筆頭,把書的內容手打出來,對手,對腦,都有好處!??!
第 10 章 圖形操作
圖形化界面是 Windows 操作系統最重要的特性之一,微軟以此迅速打敗對手,贏得了用戶的認可。計算機圖形學一直是計算機科學體系中的重要內容,在 Windows 編程史上,圖形操作也一直是核心開發技術之一。本章將介紹如何在 ASP.NET 的 Web 應用程序中 GDI+ 繪圖。
?
10.1
圖形基礎
?
10.1.1 GDI+ 介紹
?
讀者可能聽說過 Windows GDI ( Graphics Device Interface , 圖形裝置界面),這是 Windows 操作系統的一個圖形包,用于支持 Windows 操作系統中的圖形界面,它也幫助開發人員在不考慮特定設備細節的情形下在計算機上進行繪圖操作。比如就圖形輸出來說,開發人員在繪圖時根本不用考慮是在屏幕上繪制還是在打印機上繪制,只需要指明輸出設備即可讓 GDI 自己解決這些細節問題。
?
隨著開發技術的進步, GDI 從某種意義上已經不能滿足需求,于是微軟把 GDI 進一步封裝抽象,形成新的 GDI+ ,并在性能和功能上進一步完善。 GDI+ 構成了 Windows XP 操作系統及其后續版本的子系統的應用程序編程接口( API )。 GDI+ 負責在屏幕和打印機上顯示信息,它是 GDI 的改進,同時也是 .NET 框架結構的重要組成部分。和 GDI 一樣,它提供了對二維圖形圖像和文字排版處理的支持,通過 GDI+ 能夠創建與設備無關的應用程序。使用 GDI+ 可以創建圖形、繪制文本以及將圖形圖像作為對象來操作,旨在提高性能和易用性。
?
與 GDI 相比, GDI+ 提供了一些新特性: Alpha 混合技術、反鋸齒處理技術、漸變色和紋理填充、寬線條、基本幾何曲線樣式、可縮放區域、浮點數坐標、嵌入畫筆、高質量過濾和縮放、多種線條樣式和端點選項等。
?
當然,本書并不專門講解圖形編程,限于篇幅,本章將針對通用操作進行講述。
?
?
10.1.1 GDI+ 基礎
?
在學習 .NET GDI+ 圖形操作以前,先將幾個基礎概念回顧一下。
?
1. ?????? 坐標系
?
GDI+ 在坐標系中繪制直線、矩形和其他形狀,默認坐標系的原點是左上角,并且 X 軸指向右邊, Y 軸指向下邊。默認坐標系的度量單位是像素,如圖所示。
?
?
2. ?????? 像素
?
計算機監視器是在一個點的矩形數組上創建其顯示,這些點被稱為圖片元素或像素。各臺監視器屏幕上顯示的像素數量都是不同的,并且用戶通??梢栽谝欢ǔ绦蛏吓渲脝为氁慌_監視器上顯示的像素數量。比如通常所說的分辨率 1024*768 就是指 X 軸上有 1024 個像素、 Y 軸上有 768 個像素,所以坐標實際上是建立在像素點陣上的。下圖表示了 3 個點及其坐標。
?
從這個意義上說,如何表示一條直線呢?下圖演示了在確定兩個點的情況下,如何在計算機點陣中表示一條直線。
?
?
由此可見,直線并非上那么直,只不過在分辨率很高的情況下肉眼無法分辨而已。當然,這個計算過程很復雜,是計算機圖形學方面的知識,此處不再贅述。
?
?
3. ?????? 位圖
?
位圖是位的數組,它指定了像素矩陣中各像素的顏色,專用于單個像素的位數,決定了可分配到該像素的顏色數。例如,如果用 4 位來呈現每個像素,那么一個給定的像素就可以分配到 16 ( 2 4 = 16 )種顏色中的一種。簡單來說,位數越多,表現出來的圖形顏色越豐富、逼真。
?
存儲位圖的磁盤文件通常包含一個或多個信息塊,信息塊中存儲了如每像素位數、每行的像素數以及數組中的行數等信息。不同格式的圖形文件會采用不同的存儲標準,一般會以不同的擴展名標識。
?
GDI+ 支持如下圖形文件格式
?
◇ BMP
?
BMP 是 Windows 使用的一種標準格式,用于存儲設備無關和應用程序無關的圖像。一個給定 BMP 文件的每像素位數值( 1,4,8,16,24,32 或 64 )在文件頭中指定。每像素 24 位的 BMP 文件是通用的。 BMP 文件通常是不壓縮的,因此不太適合通過 Internet 傳輸。
?
◇可交換圖像文件格式( GIF )
?
GIF 是一種用于在網頁中顯示圖像的通用格式。 GIF 文件適用于畫線、有純色塊的圖片和在顏色之間有清晰邊界的圖片。 GIF 文件是壓縮的,但是壓縮過程中沒有信息丟失,解壓縮的圖像與原始圖像完全一樣。 GIF 文件中的一種顏色可以被指定為透明,這樣,圖像將具有顯示它的任何網頁的背景色。在單個文件中存儲一系列 GIF 圖像可以形成一個動畫 GIF 。 GIF 文件每像素最多能存儲 8 位,所以它們只限于使用 256 種顏色
?
◇聯合攝影專家組( JPEG )
?
JPEG 是一種適應于自然景觀(如掃描的照片)的壓縮方案。一些信息會在壓縮過程中丟失,但這些丟失人眼是察覺不到的。 JPEG 文件每像素存儲 24 位,因此它們 8 能夠顯示超過 1600 萬種顏色。 JPEG 文件不支持透明或動畫。 JPEG 圖像中的壓縮級別是可以控制的,但較高的壓縮級別(較小的文件)會導致丟失更多的信息。對于一幅以 20 : 1 壓縮比生成的圖像,人眼難以把它和原始圖像區別開來。與 BMP 和 GIF 相比, JPEG 壓縮不適用于線條圖形、純色塊和清晰邊界。
?
有意思的是, JPEG 是一種壓縮方案,不是一種文件格式,“ JPEG 文件交換格式( JFIF )”是一種文件格式,常用于存儲和傳輸已根據 JPEG 方案壓縮的圖像。 Web 瀏覽器顯示的 JFIF 文件使用 .jpg 擴展名
?
◇可交換圖像文件( EXIF )
?
EXIF 是一種適用于數碼相機拍攝的照片的文件格式,其文件中含有根據 JPEG 規格壓縮的圖像。 EXIF 文件中還包含了有關照片的信息(拍攝日期、快門速度、曝光時間等)和相機信息(制造商、型號等)。
?
◇可移植網絡圖形( PNG )
?
PNG 格式不但保留了許多 GIF 格式的優點,還提供了超出 GIF 的功能。像 GIF 文件一樣, PNG 文件在壓縮時也不損失信息。 PNG 文件能以每像素 8,24 或 48 位來存儲顏色,并以每像素 1 、 2 、 4 、 8 或 16 位來存儲灰度。相比之下, GIF 文件只能使用每像素 1 、 2 、 4 或 8 位。 PNG 文件還可為每個像素存儲一個 Alpha 值,該值指定了該像素顏色與背景顏色混合的程度。
?
PNG 優于 GIF 之處在于,它能漸進地顯示一幅圖像(也就是說,在圖像通過網絡連接傳遞的過程中,顯示的圖像將越來越完整)。 PNG 文件可包含灰度校正和顏色校正信息,以便圖像在各種各樣的顯示設備上精確地呈現。
?
◇標簽圖像文件格式( TIFF )
?
TIFF 是一種靈活的、可擴展的格式,各種各樣的平臺和圖像應用程序都支持這種格式。 TIFF 文件能以每像素任意位來存儲圖像,并可以使用各種各樣的壓縮算法。單個的多頁 TIFF 文件可以存儲數幅圖像;可以把與圖像相關的信息(掃描儀制造商、主機、壓縮類型、打印方向和每像素采樣等)存儲在文件中并使用標簽來排列這些信息;也可以根據需要通過批準和添加新標簽來擴展 TIFF 格式。
?
?
?
4. ?????? 顏色
?
計算機中的顏色表示通常有以下 3 種方式:
?
◇ RGBA
?
R 代表紅色, G 代表綠色, B 代表藍色, A 代表透明度,即可紅、綠、藍和透明度的組合來表示計算機中的所有顏色。
?
RGB 是色光的色彩模式: 3 各色彩疊加形成了其他的色彩。因為 3 種顏色都有 256 個亮度水平級,所以 3 種色彩疊加就形成 1670 萬種顏色了,也就是真彩色,通過它們足以展現絢麗的世界。在 RGB 模式中,由紅、綠、藍相疊加可以產生其他顏色,因此該模式也叫加色模式。所有顯示器、投影設備以及電視機等許多設備都是依賴于這種加色模式來實現的。
?
就編輯圖像而言, RGB 色彩模式也是最佳的色彩模式,因為它可以提供全屏幕的 24 位的色彩范圍,即真彩色顯示。但是,如果將 RGB 模式用于打印,那就不是最佳的了,因為 RGB 模式所提供的有些色彩已經超出了打印的范圍之外,因此在打印一幅真彩色的圖像時,就必然會損失一部分亮度,并且比較鮮艷的色彩會失真。
?
◇ HSB
?
即用色調、飽和度、亮度的組合方式來表示顏色,其中 H 表示色相, S 表示飽和度, B 表示亮度。
?
色相:表示純色,即組成可見光譜的單色。紅色在 0 度,綠色在 120 度,藍色在 240 度。它基本上是 RGB 模式全色度的餅狀圖。
?
飽和度:表示色彩的純度,為 0 是為灰色。白、黑和其他灰色色彩都沒有飽和度。在最大飽和度時,每一色相具有最純的色光。
?
亮度:表示色彩的明亮度。為 0 時即為黑色,最大亮度是色彩最鮮明的狀態。
?
◇ CMYK
?
代表印刷上用的 4 種顏色, C 代表青色, M 代表洋紅色, Y 代表黃色, K 代表黑色。這 4 種顏色的組合用來表示印刷上的顏色。
?
當陽光照射到一個物體上時,這個物體將吸收一部分光線,并將剩下的光線進行反射,反射的光線就是人們所看見的物體顏色。這是一種減色色彩模式,同時也是與 RGB 模式的根本不同之處。不光人們看物體的顏色時用到了這種減色模式,而且在紙上印刷時應用的也是這種減色模式。按照這種減色模式,就衍變出了適合印刷的 CMYK 色彩模式。因為在實際應用中,青色、洋紅色和黃色很難疊加形成真正的黑色,最多不過是褐色而已,因此才引入 K- 黑色。黑色的作用是強化暗調,加深暗部色彩。
?
CMYK 模式是最佳的打印模式。
?
在 .NET 平臺上運用顏色時,用戶不必關心這些細節, System.Drawing.Color 結構封裝了大部分常用顏色值及其操作。
?
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
