在控制台中显示图像(诅咒)?

在控制台中显示图像(诅咒)?

可以使用什么方法在控制台(无 X windows)中显示图像?

例如,我可以使用curses/ncurses将控制台划分为不同的窗格,但在某些情况下我想在其中一个窗格中显示图像。必须切换到 X,并承担所有的负担和开销只是为了显示一张图像,这似乎完全是多余的。我不需要窗口系统或鼠标处理。我只需要把图像放在屏幕上。

我对 X Windows 的问题是它是一个“窗口”系统,而我更喜欢基于框架的方法(无重叠),如诅咒。 (我认为整个“窗口”范式由施乐帕克研究中心发明将“窗户”想象成桌子上相互叠放的纸片的类比是愚蠢的。)

理论上这应该是可能的,因为据我了解,游戏机实际上不再是真正的游戏机了。它们是模拟控制台,实际上是通过具有逐像素控制的全屏分辨率实现的。问题是如何扩展该模拟器以支持控制台上光栅图像的有限显示?

一种可能的解决方案(尽管特定于 Linux)是Linux 帧缓冲区功能 (fbdev)。是否有可能让它与 ncurses 很好地配合?

答案1

“模拟控制台”是特定于系统的,正如您参考fbdev.此外,它们通常集成到内核中,因此尝试直接修改它们将需要修改内核,这肯定比忍受 X 更加“矫枉过正”。

你可以直接使用fbdev,或者像Thomas Dickey建议的那样基于SDL编写一些东西,但正如他所说,所有必要的工作都没有完成,所代表的工作量不应被低估。

但虽然大多数常见桌面环境是相当重量级的,X 本身却不是(以任何遥远的现代标准来看)。如果您有一个主要基于文本的应用程序,但您需要时不时地发布图像,请考虑使用 X没有桌面环境。如何?使用startx或自定义脚本来启动 X 服务器和xterm(或您选择的终端仿真器)全屏,没有窗口管理器(或找到替代的超轻量级 WM 之一)。如果需要,可以隐藏鼠标光标。然后,从文本模式程序中,您可以在屏幕上的指定位置启动和停止轻量级图像显示 X 客户端,并在程序控制下删除它们。您可以调整大小xterm或只是适应文本屏幕的一部分将被遮挡的事实。当然,这个主题有无数种变化,但你明白了。

我曾经在 RAM 低于 4Mb(不是 Gb)的 Unix 机器上使用 X,所以 X 没有必要臃肿。一个有益的副作用是,您可以获得平台可移植性(您可以使用 X 服务器瞄准任何目标)和远程运行的能力。

答案2

原则上也许是这样。但所有必要的工作都还没有完成。 恩诅咒基于 POSIX特米奥斯,而帧缓冲区与此无关。

PD诅咒被移植为使用 SDL (简单直接媒体),所以它是“可行的”。

答案3

严格来说不是 ncurses,但是术语是一个内置图像支持的终端仿真器。如果您使用 fbdev 后端构建 EFL,它将在没有 X 的情况下运行。请注意,fbdev 在 Linux 内核中被视为已弃用,因此不会为其生成新的驱动程序。要使用 fbdev 后端运行术语:

ELM_ENGINE=fb terminology

根据您的发行版,EFL 可能会或可能不会构建 fbdev 支持。检查./configure运行的是--enable-fb

答案4

你可以试试libaa。 ASCII Art 相当不错,但即使是大屏幕也可能需要缩放才能看到任何细节。显示应用程序称为aview,但只能读取p?m 系列格式,例如.pnm。快速运行 Imagemagick 的转换实用程序就可以解决这个问题。有关详细信息,请参阅以下内容,一些发行版带有 libaa 和实用程序。有一个画廊可以演示 libaa 的功能。

http://aa-project.sourceforge.net/aalib/

相关内容