大自然中的顏色和計算機世界裡的顏色,頗有許多相似之處,甚至可以說計算機世界裡的顏色就是來自大自然的。我記得我的一位師長曾對我說:「科學源於生活又低於生活,藝術源於生活而高於生活」。現在想起來,似乎真的是這個樣子。
大自然中的顏色有多少種呢?
不知道唉,可以說是無數種了。
不過既然科學源於生活又低於生活,那麼計算機中的顏色肯定就少於無數種(作者廢話,被暴打中.......)
一般我們的計算機的顏色,通常有兩種格式,一種是16bit格式,一種是32bit格式。
開啟顯示屬性面板,在「setting」裡看color quality就會發現你計算機支援的顏色格式了,我的計算機顯示medium(16 bit)和hightest(32bit)兩種,有些計算機也許還可能顯示low(8bit)吧。
關於8bit和小於8bit的顏色格式,設計到調色盤問題,個人認為現在的計算機配置都很高,所以不用調色盤也完全可以,所以不說了(其實自己也不知道調色盤到底怎麼回事)
16bit格式有兩種
565 format: rrrr rggg gggb bbbb(從左到右,記憶體位址減小,和下面所說的順序相反)
555 format: 0rrr rrgg gggb bbbb
不同的顯示卡支援的格式不太一樣,如果在16bit格式下編寫涉及顏色的程式的話,
最好提前知道顯示卡支援的格式型別,免得賦值的時候出錯。
我知道一種方法就是directdraw7裡面有乙個getpixelformat的函式,可以得到當前顯示卡支援的顏色格式。不過,我們通常的顏色操作都是在32bit 下進行的。
這裡存在這一種24bit的格式,實際上,單純的從顏色深度的角度講,24bit 和32bit是一樣的,只是32bit的格式比24bit多了乙個阿拉法位,如果用direct3d編寫遊戲,會用到這一位,一般編寫2維的程式,是用不到的。而且在計算機的世界裡,3可是乙個很討厭的數字,即使乙個數字只需要3個位元組,可實際上在記憶體裡面,實際上也是佔4個位元組的。
在微軟提供的開發平台vs.net環境下
經常會遇到如下幾種設計到顏色的格式和巨集
名稱型別
位元組定義
格式(記憶體中,從左到右,位址增大)
colorref
32bit整數
4 r g b 0
rgb巨集
3 (b<<16|g<<8|r)
r g b 0
rgbquad
結構體4
成員變數為rgbblue
rgbgreen , rgbred ,
rgbreserved
b g r re
rgb_24 巨集3
(r<<16|g<<8|b)
b g r 0
rgb_32巨集 4
(a<<24|r<<16|g<<8|b)
b g r a
可以看出,雖然都是表示顏色的值,但是在記憶體裡儲存的方式確實不一樣的,
我上面所列出的格式,是按照記憶體位址從小到大的順序列出的,
以rgb_32為例,其中 b分量的所在位元組的位址值是最小的,而a分量的位元組的位址值比b分量的位址大3個值,上面所列出的值大致分為兩大陣營,前兩個是乙個陣營,後三個是乙個陣營,因為他們在記憶體裡的儲存順序的不同,所以如果用的地方不對,就會出錯。
就我的經驗來看,如果用cdc編寫程式,用第一陣營的兩個顏色表達方式,如果用directdraw編寫程式,用rgb_24這種格式,比如
buffer 這種鎖定操作,直接賦rgb_24就非常的方便了,你如果賦的是rgb,那麼除非把 r,g,b的順序顛倒一下,否則,得到的顏色,肯定不是你想要的(rgb三個分量相等除外)
如果用direct3d程式設計,那麼也許rgb_32是個不錯的選擇,不過我還沒用過
如果對乙個bmp檔案(現在大多數的bmp都是24bit的)進行讀取操作,那麼我建議用
rgbquad,因為它是乙個結構體,可以直接把每乙個位元組的值賦給相應分量的值,使用起來很方便的
另外在這羅嗦一句,關於24- bit bmp檔案的顏色儲存格式,如果你已經把檔案的所以資料讀到記憶體裡面了,
那麼,每乙個象素點,在記憶體中的儲存格式為 b g r
有人會問了,那麼這豈不是只有3個位元組麼?不是和上面所說的矛盾了?
其實這些點在記憶體中是連續儲存的,實際的格式是 b g r b g r ........
如果乙個bmp檔案的象素大小是nwidth*nheight的話,
那麼象素矩陣實際上佔的位元組數是:(((nwidth+31)>>4)<<4)*nheight
所以,無論象素大小是多少,所佔記憶體的大小始終是16的倍數的
會有很多收穫的。
水平有限,如有不妥之處,請達人不吝賜教。
關於Web Worker的一些心得
現在在平台中線程js中不能識別extjs的方法,原因是執行緒js無法引入extjsd的方法。onmessage只接收資料,不能在裡面直接寫方法,只能呼叫外面的方法 webwork.js無法訪問window,docment等物件 案例 建立乙個執行緒 varworker newworker test ...
一些關於BFC的心得
bfc的概念 什麼是bfc?bfc 塊級格式化上下文是前端頁面的視覺化css渲染的一部分,是布局過程中生成塊級盒子的區域,也是浮動元素與其他元素的互動限定區域。在bfc中,盒子從頂端開始垂直的乙個接乙個的排列,兩個盒子之間的垂直的間隔是由他們的margin值決定的,在乙個bfc中,兩個相鄰的塊級盒子...
關於租房的一些心得
在下畢業於2020年7月,畢業後找了兩份工作,產生了一些由於不慎重而導致的損失。這裡提醒一些剛開始租房還沒有退房的小夥伴幾點一定要注意的,不要因為想當然而把房子借給別人 不要因為想當然而給別人好處,特別的鄰居,因為當出現問題時他們未必會幫你,並且會對你的要求厭煩 應該在自己人在場時退房而不能等到離開...