我想自己学习图形库,并稍微玩弄它们。我建立了一个小程序,将行和形状定义为像素列表,但是我找不到直接访问屏幕的方法,这样我就可以在屏幕上显示点而不需要任何中间点。
我的意思是我不想使用任何预先构建的图形库,如gnome,cocoa等。我通常使用Python编写代码,我的程序使用Python,但我也可以编写和集成C模块。
我知道直接访问屏幕硬件会夺走Python的多平台方面,但我为了学习而无视它。那么:有没有办法直接在Python中访问硬件,如果有,那是什么?
答案 0 :(得分:7)
不,Python不是这种原始硬件访问视频卡的最佳选择。我建议在DOS下编写C语言。嗯,实际上,我不推荐它。这是一件可怕的事情。但是,这就是我学会如何做到这一点的原因,并且可能与您在没有任何中间设备的情况下直接访问硬件一样友好。
我说DOS而不是Linux或NT,因为这些都不会让你直接访问视频硬件而无需编写驱动程序。这意味着必须学习整个驱动程序API,并且你需要调用很多“魔法”,这不会非常明显,因为在Windows NT中编写视频驱动程序相当复杂。
我说的是C而不是Python,因为它为你提供了真正的指针,以及用它们做蠢事的能力。在DOS下,您可以写入C中的任意物理内存地址,这似乎是您想要的。试图让Python在一个可怕的操作系统下运行,让你直接硬件访问本身就是一件令人沮丧的事情,即使你只想做一些Python擅长的简单事情。
并且,正如其他人所说,不要指望在现实世界中使用您在该项目中学到的任何东西。这可能很有趣,但是如果你试图以这种方式编写一个真实的应用程序,那么你很快就会被那些需要维护代码的人所击中。
答案 1 :(得分:2)
这似乎是一个很好的自学路径,我会加上我的2美分价值,并建议你考虑看 GObject ,开罗和 Pygame < / strong>模块一段时间。
Python GObject 模块的级别可能高于您当前的兴趣,但它可以使用 Cairo (请参阅home page)进行像素级别绘制以及使用Python为便携式GUI应用程序提供通用基础
Pygame 还有像素级方法以及图形驱动程序的访问方法(在更高级别) - 这是一个快速code example
答案 2 :(得分:1)
现在这是一个古老的线索,但我在思索同样的问题时偶然发现了它。
我曾经用汇编语言编程。在我的日子里,在屏幕上绘图只是(?)将值放入内存位置。该值打开或关闭像素并定义其颜色。
“捅”一词来自Basic,而不是汇编程序。在汇编程序中,您必须将值写入数据寄存器,然后告诉处理器使用其他命令将数据放在何处并指定地址寄存器,通常采用十六进制格式!每个不同的处理器都有自己的汇编语言。但是hec是快速的代码!
随着硬件的发展,我发现图形硬件编程变得越来越复杂。除了现在简单地定义像素之外,还有更多内容。图形子系统有自己的处理器 - 或处理器 - 而且你必须学会与之交谈。处理器不只是在内存位置上填充内容。 (我相信曾经是世界上最快的超级计算机一段时间都在图形芯片上运行了!)顺便说一句,“Plonk”不是一个基本命令。
抱歉;我离题了。在回答原始海报的查询时,我相信通过试验Raspberry Pi可以最好地实现理解图形绘制过程的目标。它兼容Python,因此非常适合这项工作。它的硬件文档齐全,价格便宜且易于使用。
希望这有助于某人,干杯,M