天天看點

Processing程式設計學習指南1.3 灰階模式

<b>1.3 灰階模式</b>

<b></b>

正如1.2節所讨論的,在螢幕上建構圖形至少要知道像素坐标。你已經非常禮貌地指導計算機在某個特定的位置繪制了特定大小的圖形。但是,還有一個非常關鍵的内容沒有介紹—顔色。

在數字化的世界裡,精确性是非常重要的。比如,“嗨,你能将那個圓設定為藍綠色嗎?”之類的話是沒有意義的。因為,顔色是通過一系列具體的數值來定義的。下面舉一個最簡單的例子:灰階(grayscale)。為灰階指定數值的方法如下:數值0代表黑色,數值255代表白色,而在此之間的其他數值(50、87、162、209等)代表的是由黑色逐漸到白色的過渡色,如圖1-13所示。

你是否感覺0~255的取值看上去太随意?

對于某個指定圖形的顔色資訊,它是存儲在計算機記憶體中的。記憶體實質上是采用二進制系統,由0和1構成的一個長序列。每個0或1就是一個比特(bit),比特是資料存儲的最小機關,8比特就稱為一個位元組(byte)。想象一下,如果你有8比特(也就是1位元組),對它們按照順序進行排列,那麼總共有多少種排列方式?答案是256種(如果你對二進制數進行一點研究就會證明這一點),也就是0到255之間的一系列數字。processing使用8位顔色描述灰階範圍(grayscale range),使用24位顔色(紅、綠和藍三種顔色分别包含8位,詳見1.4節内容)描述全彩色(full color)。

了解了顔色的工作機制,現在就可以回到1.2節,為你繪制的圖形設定特定的灰階顔色了。在processing中,每一個圖形都有stroke()函數,或fill()函數,或者兩者兼有。stroke()函數可以設定圖形輪廓的顔色,fill()函數可以設定圖形的填充顔色。很明顯,線條和點隻能使用stroke()函數。

如果你忘記指定顔色值,那麼processing預設使用黑色(0)作為線條顔色,白色(255)作為填充顔色。注意,由于我使用了尺寸為200×200像素,也就是一個相對大一些的視窗,是以,也要使用與視窗對應的合适大小的矩形坐标數值,如圖1-14所示。

在繪制圖形之前,通過增加strok()和fill()函數可以設定顔色。這很像指導你朋友用一隻專用筆在繪圖紙上畫畫,你應該在他開始畫之前而不是之後告訴他選好顔色。

另外還有一個函數background(),它可以在圖形渲染時設定視窗的背景色。

示例1-1:stroke()和fill()

使用nostroke()和nofill()函數可以禁用線條顔色stroke()和填充色fill(),前者使得輪廓線消失,後者使得填充色消失。你的直覺可能是想使用stroke(0)來禁用輪廓線,但是,要注意0并不是“什麼都沒有”,而是意味着黑色。此外,注意不要同時使用nofill()和nostroke(),否則不會顯示任何東西!

示例1-2:nofill()

在繪制圖形時,processing總是使用最近設定的stroke()和fill(),從上到下逐行執行代碼(見圖1-17)。

練習1-4:猜想需要什麼樣的指令能夠完成下面的圖形。