我是一個初學者,我想知道如何在屏幕上直觀地呈現圖片,視頻,窗口和按鈕等。我不是問是否是由gtk或wxwidgets製作的,我的問題是讓像素按照他們的方式出現的基本思路是什麼。 GUI庫使用什麼來將它們放在屏幕上?視覺表現如何?
視覺表現如何?
回答
閱讀Wikipedia上raster graphics項,它涵蓋了基礎知識。
簡短的回答了最後一個問題:GUI庫操作系統調用的函數來繪製UI元素,這反過來又要求顯示硬件相應的驅動程序。驅動程序通過寫入其外部可訪問的端口向硬件發送命令,這些端口映射到計算機內存或I/O區域的特殊區域(請參閱Wikipedia上的Device Driver)。
在其最基本的,操作系統公開一組基的繪圖API(GDI,DirectX的,GDI +時,OpenGL),然後調用所述顯示驅動器和後更新了「視頻存儲器」。回到DOS時代,您可以手動更新它,但在大量硬件系統出現的情況下,這變得越來越困難,因此您需要指示視頻驅動程序爲您完成。現在
,一旦它在視頻存儲,信息被依次發送到您的顯示器,通過掃描線掃描線(讀逐行)。如果您在視頻內存上傳到顯示器的過程中更新視頻內存,您會得到所謂的撕裂(遊戲中的事物同步設置避免)。
爲避免在上傳過程中撕毀和鎖定視頻內存,通常會使用一種稱爲雙緩衝的技術,您的顯卡上實際上有兩個「視頻內存」緩衝區,並且在完成上傳到一個顯示器和顯示器掃描開始後,卡片上傳第一個緩衝區,並讓您將新信息寫入第二個緩衝區,從而使該過程並行化。
注:這是關於它的2D部分,因爲這是你彷彿在問。 3D部分是相似的,但它有一個額外的層,一旦你將頂點傳遞給你的顯示驅動程序,它將它們投影到「屏幕空間」並將它們上傳掃描線掃描線到視頻存儲器,然後上傳到你的視頻存儲器監控。
概述
通常,在原始形式的像素數據的分組被稱爲幀緩存。這是相同大小的一維數組值。每個值的大小取決於所使用的色彩空間以及色深。例如,在C:unsigned int fb[width*height];, given that sizeof int is 4
中可以像這樣定義一個32位RGBA幀緩衝區。
硬件通常使用的圖形硬件,比如OpenGL和DirectX,以及像Linux和GDI +在Windows上的/ dev/FB直接幀緩衝訪問的RGB色彩空間。電影的硬件解碼通常取決於YCbCr色彩空間。一些圖像文件格式也將其數據保存在除RGB之外的其他顏色空間中,但是會將其轉換爲RGB格式傳送到它們使用的API。
像素顏色
單個像素的顏色可表示這些方式(該清單是不完整),假設RGB顏色空間:
單獨顏色通道(真彩色)
真顏色是三個或四個顏色通道中的每一個的一個組件,其中單獨的顏色通道值表示每種顏色的強度。如果它有一個alpha通道,它的工作方式相同,但alpha的含義是依賴於上下文的。通常,alpha代表不透明度,其中最低值爲100%半透明,最高值爲100%不透明。例如:(0,255,0,128)將表示50%半透明綠色,給定RGBA真彩色,每個通道使用8位色彩深度。
調色板
隨着調色板,各個像素值是一個索引的顏色數組,通常是真彩色(並不意味着每通道8比特雖然)。索引的範圍是可以表示的顏色的數量。之前的8位調色板指數很常見,特別是在20世紀90年代早期的商用VGA硬件上。然後硬件可以一次顯示256色的子集,在2^24色的池中。
色彩空間
我不想讓這個答案太長時間,我認爲維基百科回答了這個比我好,無論如何,所以這裏是一個鏈接:Wikipedia: color space 色彩空間的方式來表示顏色,顏色的組合。
我應該選擇哪種顏色空間?
這取決於應用程序如何處理像素數據。不同的色彩空間定義了不同的需求。 YCbCr由運動圖像使用,因爲它定義了伽馬級別,例如再次由NTSC和PAL標準定義。 sRGB做同樣的事情,只適用於電腦顯示器,在那裏你可以選擇特定屏幕的伽馬/色彩配置文件。當重要的是您在屏幕上感知的顏色與最終介質上感知的顏色非常接近時,這些顏色空間非常方便。當伽瑪不重要時,以及計算機屏幕是最終媒體時,通常會使用RGB。由於顏色空間是線性的,因此使用起來很容易。因此,對於電腦遊戲,您可能會使用RGB,但對於Photoshop或GIMP等圖像處理程序,您可以支持HSV/HSL/sRGB和CMYK。 在使用API返回的幀緩衝區中的原始像素進行處理時,除非另有說明,否則可以假定爲RGB。處理運動圖片時,假設YCbCr。硬件支持許多不同的方式來編碼數據。確保您選擇與硬件支持和性能相關的格式。
- 1. 計算機視覺/增強現實:如何在視覺上疊加3D物體?
- 2. 如何在視覺上ActionMode
- 3. 如何在視覺基本
- 4. 如何從視覺的WebPart
- 5. 如何從視覺樹
- 6. 視覺(HTL)列表迭代
- 7. 如何使視覺效果與javascript出現
- 8. 如何實現模糊的背景視覺效果
- 9. 視覺呈現的瀏覽器如何加載網站內容
- 10. 如何讓視覺鍵盤出現在我的UIToolBar上方?
- 11. 我如何實現像ask.com這樣的視覺主題?
- 12. 如何實現視覺工作室uml類圖到vb.net類
- 13. 如何在Exrin中實現視覺忙碌/工作指示器?
- 14. Power BI - 更改現有視覺效果
- 15. 異步呈現WPF視覺到位圖
- 16. 用於增強現實的視覺SLAM
- 17. 在JPanel上出現視覺文物
- 18. 如何打造出如下的視覺
- 19. SQL表關係沒有出現在視覺工作室
- 20. 視錐體視覺
- 21. Vim:如何插入視覺塊模式?
- 22. 如何發展AForge.NET計算機視覺
- 23. 如何過濾視覺選擇?
- 24. 如何診斷Silverlight的視覺問題
- 25. 如何編譯視覺C++程序與
- 26. 如何在視覺上自定義SonarQube?
- 27. 如何創建視覺分析器?
- 28. 如何從視覺搜索形式
- 29. 如何使視覺舉動或蟒蛇
- 30. 如何避免在視覺基本6
我認爲你的問題太開放了。縮小範圍。我已經回答了API如何用不同的顏色空間定義顏色以及如何定義幀緩衝區,但驅動程序細節實際上是一個單獨的問題。由於您的問題現在已定義,您可能也會問「電腦如何工作?」。開放式問題通常不會給出很好的答案。 – 2009-12-15 10:15:22