2011-12-24 57 views
11

我想了解我自己的圖形庫並與他們一起玩。我構建了一個小程序,將線條和形狀定義爲像素列表,但我找不到直接訪問屏幕的方式,以便我可以在屏幕上顯示點而不用任何中間值。有沒有辦法直接在Python中訪問硬件?

我的意思是我不想使用任何預編譯的圖形庫,如gnome,cocoa等。我通常使用Python來編寫代碼,我的程序使用Python,但我也可以編寫和集成C模塊。

我知道,訪問屏幕硬件直接帶走了Python的多平臺的一面,但我爲了學習而忽視它。那麼,有什麼方法可以直接在Python中訪問硬件,如果是這樣,它是什麼?

+7

沒有人,甚至不是國家的最先進的視頻遊戲(大部分時間,無論如何)做的事情是低級別的。這是司機的工作。對於幾乎所有的應用程序來說,這是完全不切實際的:複雜的,複雜的,不可能跨越足夠多不同的硬件,並且在硬件供應商改進某些東西(例如擴展管道)時容易中斷,這只是我的頭頂。除此之外,沒有什麼可以學習的,除非你想寫驅動程序。我們有DirectX,OpenGL等是有原因的。而且你可以通過Python訪問那些(或者至少是OpenGL)。 – delnan 2011-12-24 00:43:03

+6

@delnan是的,但是如果問題是有效的,op並不需要證明他爲什麼要學習。如果他想寫司機呢? '複雜得難以置信,很難完全不可能跨越足夠多的硬件,並且在硬件供應商改進了某些東西時很容易崩潰。「所有這些與像素開啓和關閉有何關係?這是一個問題,其他一切都是你廣泛推測的觀點。只展示一個像素是一個非常棒的學習體驗。 – yannis 2011-12-24 00:53:11

+3

你可能是對的。但我的印象是,OP對什麼構成低級圖形編程有錯誤的印象。 – delnan 2011-12-24 00:54:29

回答

2

這似乎是一個很大的自我學習路徑和我想補充我的兩美分的價值,並建議你考慮看GObject的開羅pygame的模塊一段時間。

Python的的GObject模塊可處於比當前的興趣較高的水平,但它使像素級繪圖與開羅(見home page),以及提供用於使用Python

便攜式GUI應用的一般基

Pygame的還具有像素級別的方法,以及接入方式的圖形驅動程序(上級) - 這裏是一個快速code example

7

不,Python不是這種原始硬件訪問視頻卡的最佳選擇。我會建議在DOS下編寫C語言。其實,我不推薦它。這是一件可怕的事情。但是,這是我學會如何去做的,而且它可能與您直接訪問硬件時沒有任何中間環節一樣友善。

我說DOS而不是Linux或NT,因爲這些都不會給你直接訪問視頻硬件而無需編寫驅動程序。這意味着必須學習整個驅動程序API,並且需要調用很多「魔力」,這不會很明顯,因爲在Windows NT中編寫視頻驅動程序相當複雜。

我說C而不是Python,因爲它給了你真正的指針,並且能夠用它們做出愚蠢的事情。在DOS下,你可以在C中寫入任意的物理內存地址,這似乎是你想要的。即使你只想做一些Python擅長的簡單東西,但試圖在一個操作系統下運行Python足以讓你直接訪問硬件本身就是一件令人沮喪的事情。

而且,正如其他人所說的,不要指望在現實世界中使用您在這個項目中學到的任何東西。這可能很有趣,但如果你試圖用這種方式編寫一個真正的應用程序,你會立即被任何維護你的代碼的人所擊中。

1

這是相當舊的線程現在,但我偶然發現了它,而沉思同樣的問題。

我曾經用匯編語言編程。在我的日子裏,在屏幕上畫畫很簡單(?)是一個把價值放在記憶位置的問題。該值打開或關閉像素並定義其顏色。

術語'戳'來自Basic,而不是彙編程序。在彙編程序中,必須將一個值寫入數據寄存器,然後通過另一個命令告訴處理器將數據放在哪裏,並指定一個通常以十六進制形式的地址寄存器!而且每個不同的處理器都有自己的彙編語言。但hec是代碼快!

隨着硬件的進步,我發現圖形硬件編程變得越來越複雜。還有更多的東西比現在簡單地定義一個像素。圖形子系統有自己的處理器 - 或者處理器 - 這就是你必須學會​​與之交談。處理器不只是在內存位置上放置東西。 (我相信曾經是世界上最快的超級計算機在圖形芯片上運行一段時間!)'Plonk'不是一個基本的命令順便說一句。

對不起;我離題了。在回答原始海報的查詢時,我相信通過嘗試使用Raspberry Pi可以最好地實現理解圖形繪製過程的目標。它兼容Python,因此非常適合這項工作。它的硬件是有據可查的,而且價格便宜且易於使用。

希望這可以幫助別人,歡呼聲,男

相關問題