日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据的流动——计算机是如何显示一个像素的

發布時間:2024/3/26 编程问答 74 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据的流动——计算机是如何显示一个像素的 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在計算機內部是怎么把一張照片顯示到屏幕上的呢?

對于這個問題一直很好奇,這應該是也是圖形學的一個最基礎的問題吧。沒上過計算機組成原理課,只好自行百度谷歌~ 發現網上的答案大多不完整,前段時間順著問題一直搜索,從計算機的發明到顯示器成像后來又到了電路,后來甚至工業革命的發展史,根本停不下來,有了一個主題后看歷史也是真挺有意思的。在這里將我的理解大概記下來,不求細節精確,只求完整易懂。

一個從編程/輸入設備輸入到顯示器顯示到人眼的完整過程。分為幾個階段:(應用程序/輸入設備產生)數據與指令——>CPU——>顯卡驅動程序——>顯卡——>顯示器——>人眼。

讓我們從尾端倒著看起。先說顯示器顯示與人眼混色的原理。

一、顯示器階段

1.1、顯像原理

拿常見的液晶顯示器舉例,顯示器是的底部是一塊發光白板燈,中間液晶,然后是一些濾光片。顯示器的屏幕是由很多個“小塊”組成的,每塊后面都有紅綠藍三個濾光片,每個小塊就是1個像素點。濾光片能夠把顯示器背后發出的白光過濾,留下單色光通過,白光經過三塊濾光片后被分解成了紅綠藍三束光,進入人的眼睛。由于一個像素極其小,三個濾光片距離極其近,以至于透過它們的光進入人眼后,人眼分不清這是3束光,即光在人眼中發生混色作用,于是一個像素便“有了”顏色。這3束光強度如果一致的話,混色后人眼將會看到白色光,而想要看到五顏六色的話,混合前的紅綠藍三束光應該具有不同強度(亮度),如何獲得不同亮度的三色光呢?這就是液晶作用了。

這里插一句,可能你會問光的三原色為什么是紅綠藍而不是紫色、粉色、或者屎黃色呢?是因為人類的視網膜上面的視錐細胞對紅綠藍三色最敏感,可能不同的人看見的世界顏色還真不一樣。這有點生物學了。

說回液晶,液晶不是固態,也不是液態,而是一種中間的狀態。其分子在電壓的控制下,形成不同的排列方式,所以可以控制光線的透過,形成不同明暗程度的畫面。這是一個非常重要的步驟,如果只能形成一明一暗是構成不了畫面的.不管是顯示器還是投影機,其實都是按這個原理進行顯示的。當然如果只是進行了上述的過程,形成的畫面僅僅是黑白畫面,因為透過液晶分子的光線并沒有顏色,需要濾色片來“上色”。

有了光、有了人眼、有了濾光片、有了液晶,還差什么?當然是電,液晶控制光線通過的程度是由加在液晶上的電壓強弱來控制的。現在我們知道了向顯示器輸入一定規律的電壓信號能夠控制液晶按一定規律排列,來控制紅綠藍RGB顏色分量,繼而顯示出特定顏色。

1.2、數模轉換

由于電壓信號是連續變化的(舉個栗子,從200變為201是連續變化的,而不是跳躍地一下子從200變為201),而我們知道計算機只認識0和1,內部是由0和1二進制來表示的,表示的數據是離散化的(從200跳躍到201),前者我們稱之為模擬信號,后者稱為數字信號。把承載有計算機數據的數字信號轉為顯示器用的模擬信號,這個過程就是數模轉換了,而執行這個過程的設備,就是顯卡了。
此外,簡單直觀地理解下,計算機內電路是靠高電平和低電平來表示0和1的,還有就是靠脈沖發送數字信號。

二、顯卡階段

2.1 顯卡硬件

關于顯卡,這里直接引用下百度百科:

顯卡全稱顯示接口卡,又稱顯示適配器,是計算機最基本配置、最重要的配件之一。顯卡作為電腦主機里的一個重要組成部分,是電腦進行數模信號轉換的設備,承擔輸出顯示圖形的任務。顯卡接在電腦主板上,它將電腦的數字信號轉換成模擬信號讓顯示器顯示出來,同時顯卡還是有圖像處理能力,可協助CPU工作,提高整體的運行速度。

數據從離開CPU到達顯示屏,中間必須通過如下4個步驟:

1.從總線進入GPU(圖形處理器):將CPU送來的數據送到北橋,再送到GPU里面進行處理。
2.將芯片處理完的數據送到顯存。
3.從顯存讀取出數據再送到隨機讀寫存儲數—模轉換器進行數模轉換的工作。(但是如果是DVI接口類型的顯卡,則不需要經過數字信號轉模擬信號。而直接輸出數字信號。)
4.從DAC進入顯示器:將轉換完的模擬信號送到顯示屏。

顯卡就是起數據處理和數模轉換的作用,像數模轉換、模數轉換這些都是數字信號處理、數字電路之類的學科的知識了。

以上便是CPU到顯卡再到顯示器再到人眼的過程。不過這其中還有一點,顯卡有不同類型,內部工作原理不盡相同,而同一個操作系統可以安裝在不同顯卡的機器上,如何識別它們,讓不同顯卡都能在此操作系統下正常工作,需要一個在操作系統與(顯卡)硬件間溝通者的角色,這個就是(顯卡)驅動程序了。

2.2 顯卡驅動

它是硬件廠商根據操作系統編寫的配置文件,是添加到操作系統中的一小塊代碼,其中包含有關硬件設備的信息。驅動程序扮演溝通的角色,把硬件的功能告訴操作系統,并且也將系統的指令傳達給硬件,讓它開始工作。

這一塊偏硬件我就沒有深究了,我的理解就是CPU通過操作系統中相應顯卡驅動程序訪問操縱顯卡,向顯存寫入數據。這一塊知乎上有許多相關問題。

鏈接1:顯卡、顯卡驅動、cuda 之間的關系是什么? - 冬瓜哥的回答 - 知乎

顯卡驅動,分內核態和用戶態兩部分。內核態驅動只管將用戶態驅動發過來的命令和數據準備好,通知GPU來拿,利用環形fifo來下發命令和數據指針,并追蹤命令的完成狀態。用戶態部分,負責對shader程序的編譯,編譯成GPU的二進制代碼指令。OS提供的D3D,OpenGL等函數庫,屏蔽底層不同顯卡的差異。上層程序比如游戲,在準備好對應的模型、貼圖紋理、著色器程序等數據之后,調用統一的D3D/OpenGL接口發起繪制請求,D3D則調用顯卡用戶態驅動提供的回調函數將對應的數據傳遞給后者,后者進行運行時編譯生成底層代碼,然后傳遞給內核態驅動,內核態驅動將命令和數據發送給GPU。至于GPU怎么算的,那就是完全另外一回事了。

鏈接2:計算機底層是如何訪問顯卡的?

以上部分便是將CPU里面的數據傳遞到人眼的過程。計算機如何顯示的問題已經解決了,本文主要內容到這里應該就要結束了的,但是為了完整性…咳,接下來部分就接著講CPU是怎樣獲取數據的。分為輸入設備和應用程序兩種情況來說。

三、數據輸入

3.1 鍵盤

先放一張圖片↓

?

計算機通過一系列輸入設備來獲取數據。獲取圖片可以用掃描儀、數碼相機等,獲取聲音可以用麥克風、獲取文字可以通過鍵盤,而這些設備的作用最終都是將這些數據轉換為數字信號。計算機內只存在0和1,因此,無論是圖片、文字還是聲音等,理論上計算機的一切的數據、指令等都可以通過鍵盤輸入來獲得(見上圖~)。

參考鏈接: 鍵盤基本工作原理_圖文_百度文庫

計算機鍵盤通常采用行列掃描法來確定按下鍵所在的行列位置。所謂行列掃描法是指,把鍵盤按鍵排列成n行×m列的n*m行列點陣,把行、列線分別連接到兩個
并行接口雙向傳送的連接線上,點陣上的鍵一旦被按動,該鍵所在的行列點陣信號就被認為已接通。按鍵所排列成的矩陣,需要用硬件或軟件的方法輪轉順序地對其行、列分別進行掃描,以查詢和確認是否有鍵按動。如有鍵按動,鍵盤就會向主機發送被按鍵所在的行列點陣的位置編碼,稱為鍵掃描碼。單片機通過周期性掃描行、列線,讀回掃描信號結果,判斷是否有鍵按下,并計算按鍵的位置以獲得掃描碼。鍵被按下時,單片機分兩次將位置掃描碼發送到鍵盤接口:按下一次,叫接通掃描碼;按完釋放一次,叫斷開掃描碼。這樣,通過硬件或軟件的方法對鍵盤分別進行行、列掃視,就可以確定按下鍵所在位置,獲得并輸出掃描位置碼,然后轉換為ASCII碼,經過鍵盤I/O電路送入主機,并由顯示器顯示出來。

于是從理論上,我可以用上圖的這種鍵盤按照一定的編碼敲出一長串0、1數字序列,再加一個jpg/png的后綴名保存。打開文件時,是將這些數據送入內存,圖片查看程序控制CPU,根據后綴名對數據進行解碼、解壓后得到圖像本身的數據——每個像素的RGB等。再歷經前面所述的一大串過程,CPU的數據再經過顯卡和顯示器,最終我就能看到一張滑稽的照片。(#滑稽)
?

上面介紹了如何直接獲取具體的數據并呈現。在現實中,我們不太可能用鍵盤一像素一像素地敲出一副圖片來(←這句刪除)。當然也可以,而且是個學入門圖形學的好思路,參考:極簡的 PNG 編碼函數 svpng()

有種圖像格式叫ppm,很簡單,無壓縮,可以直接開個記事本寫好圖像長寬顏色深度,然后就是各像素的rgb值,挨著寫完后,保存為ppm后綴,就可以圖像查看軟件查看咯,即用鍵盤敲了一張可以顯示的圖片出來。可以看到,雖然鍵盤產生了數據,但是如果要顯示到屏幕上,還是得通過程序將數據送到CPU。

3.2 應用程序

除了我們直接用拍照的方式記錄下一副圖片的信息之外,還有另一種主要的方式,就是通過計算機程序。畢竟,計算機不是照相機。
例如,寫了一個程序,實現了在屏幕畫一條線,或者顯示一個圓柱體,或者顯示一個怪物模型。本質上我們都是要獲得表示一幅二維圖像的一串0和1的數字,而我們知道的一些數據,例如線段長度、圓柱體的半徑高度、怪物表面部分點的坐標、我們從什么角度來觀察這些物體,那么,怎樣獲得這幅圖像的信息呢?這就是圖形學的范疇了。

但本質上,圖形學的API底層都會提供一個類似于drawPixel(int x, int y, Color color)的接口,用于實現將屏幕坐標為(x,y)的像素點顏色設置為color的功能。

四、結語

簡單來說,這個過程就是:在操作系統與硬件驅動程序的幫助下,用戶通過輸入設備或者程序向計算機CPU發送一系列的數據,這些數字信號再經過顯卡變為不斷變化的電壓模擬信號,電壓控制了液晶的濾光性,像素背后的白光被分成了強弱不同的三原色光,再經人眼的混色作用使得一個像素具有了千變萬化的顏色。

本文力求過程的完整性,不追求細節的完整性。其實上過相關計算機、機電之類專業課的應該都知道這些東西。另外像GPU計算,shader這些我也就略過了。如果你也和我一樣有著同樣的疑惑,看過這篇文章后有了直觀完整的認識,我自認為本文目的達到了,畢竟很多地方描述的不夠專業準確。錯誤之處也請指正~

P.S. 推薦書《編碼,隱匿在計算機軟硬件背后的語言》,這本書用通俗易懂的語言加上海量的配圖,從編碼說起,到搭建各種邏輯電路,再到一個CPU,最后到一個計算機。所以它又名:如何造一臺計算機。計算機本來沒有計算力,它只是一臺機器,通電后在這種狀態下,哪些電路應該連通,哪些“電燈”應該點亮,哪些電平應該高應該低,狀態變了,電路的結果也變了,僅此而已。是我們人,人為地規定,比如一組“帶編號的電燈”(可能是4個也可能是8個,由人來約定好)以這樣的亮熄順序出現的話,就是2333這個數,以另一種順序出現的話又是6666這個數,都是來自于人規定的一套解釋,這里的解釋就是編碼,A這套編碼規則規定2333這個數在別的編碼里就是250…

總之,計算機只認識電路,一些都是我們對電路結果的解釋…

參考:

  • 計算機圖形學 peter shirly
  • 原來是黑白世界 液晶顯示原理你了解嗎_明基液晶顯示器_液晶顯示器應用技術-中關村在線
  • 顯卡_百度百科
  • 操作系統、驅動和硬件的關系的思考 - 十二先生的博客 - CSDN博客
  • 鍵盤基本工作原理_圖文_百度文庫

總結

以上是生活随笔為你收集整理的数据的流动——计算机是如何显示一个像素的的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。