Xウィンドウなしでコンソールに画像を表示するにはどのような方法がありますか?
たとえば、curses / ncursesを使用してコンソールを複数のウィンドウに分割できますが、場合によってはウィンドウの1つに画像を表示したいとします。画像を表示するためにXに切り替えて、すべての負担とオーバーヘッドを取る必要があるのは、完全に重複しているようです。ウィンドウシステムやマウス処理は必要ありません。画面に画像を置くだけです。
X Windowsの問題は、これが「ウィンドウ」システムであることです。一方、私はCurseなどのフレームベースのアプローチ(オーバーラップなし)を好みます。 (私の考えでは、全体の「ウィンドウ」パラダイムXerox PARCで発明「窓」をテーブルの上に積み重ねた紙片に例えるのは愚かなことです。 )
理論的には、これはコンソールが実際には実際のコンソールではないため、可能でなければなりません。これは、実際にはピクセル単位の制御が可能なフルスクリーン解像度で実装されるアナログコンソールです。問題は、コンソールで制限されたラスター画像の表示をサポートするためにこのエミュレータを拡張する方法です。
考えられる解決策の1つは(Linux専用ですが)、次のようになります。Linuxフレームバッファ機能(fbdev)。 ncursesとうまく機能するようにすることは可能ですか?
答え1
「エミュレートされたコンソール」は、前述のようにシステムによって異なりますfbdev
。また、通常はカーネルに統合されているため、直接変更するにはカーネルを変更する必要があります。これは確かにXを使用するよりも「過剰」です。
fbdevを直接使用することも、Thomas Dickeyが提案したようにSDLに基づいて何かを書くこともできますが、彼が言ったように、必要な作業はすべて完了しておらず、表示される作業の量を過小評価しないでください。
しかし、最も一般的ですが、デスクトップ環境かなり重いですが、X自体は(どの現代標準によると)そうではありません。主にテキストベースのアプリケーションがありますが、時々画像を公開する必要がある場合は、Xの使用を検討してください。いいえデスクトップ環境。どのように?ウィンドウマネージャを使用せずにXサーバーおよび(または選択したターミナルエミュレータ)フルスクリーンを起動するstartx
には、スクリプトを使用またはカスタマイズします(または超軽量WM代替品の1つを見つけます)。xterm
必要に応じてマウスカーソルを隠すことができます。その後、テキストモードプログラム内の画面上の指定された位置で軽量画像を表示するXクライアントを起動および停止し、プログラム制御下で削除できます。xterm
画面の一部が隠れるようにテキストのサイズを変更または調整できます。もちろん、このトピックには多くのバリエーションがありますが、アイデアを得ることができます。
私はRAMが4 Mb未満(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と呼びますが、.pnmなどのp?mシリーズ形式のみを読み取ることができます。 Imagemagickの変換ユーティリティをすばやく実行すると、この問題は解決されます。詳しくは下記をご覧ください。一部のディストリビューションには libaa とユーティリティが付属しています。 libaaの機能を示すギャラリーがあります。