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

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