ディスプレイを黄色のモノクロに変更できますか?

ディスプレイを黄色のモノクロに変更できますか?

愚かなことはわかりますが、あまり使用する予定はありませんが、xrandrモニターはグレースケールと同じように表示されますが、グレーの代わりにカラーを使用する方法や類似のものはありますか?一部のアプリケーションでは、これは本当に素晴らしい効果になると思います。

ベストアンサー1

(これはWaylandや他のディスプレイ管理システムではなく、X11に固有のものです。これらの技術のいくつかは他のツールを使用して適用できます。例えばアクセシビリティ機能ドワーフの殻.)

琥珀色のディスプレイを得る2つの方法を考えることができます。すべての色を変更する合成プラグインを挿入し、すべての色を対応する琥珀色に変更するカラープロファイルを作成します。どちらもおそらく価値のあるものよりも多くの努力を必要とします(学習の側面に加えて)。

で説明されているように、各チャンネルのガンマ値を操作して、基本カラーディスプレイの優れた近似値を得ることができます。Sigveyの答え;xcalibまた、アクセスでき、ガンマ値を指定するだけでなく、明るさとコントラストを直接制御することもできます。

xcalib -blue 1.0 0 1.0 -red 1.0 0 1.0 -alter

結果は緑色で表示されます。明るさとコントラストがガンマランプに適用されるため、xrandr同じ結果が得られます。

ガンマランプをより細かく制御することは可能ですが、いかなる方法でもすべてを琥珀色に再マップすることはできません。チャンネルを特定の範囲に「クランプ」することができます。例えば、明るい赤は少し緑を導入し、より琥珀色に見えますが、暗い赤は緑として表示されます。

次のコードは、エラー処理なしでこれを行う方法を示しています。

#include <X11/Xos.h>
#include <X11/Xlib.h>
#include <X11/extensions/xf86vmode.h>
#include <stdlib.h>

int main(int argc, char **argv) {
  Display * dpy = NULL;
  int screen = -1;
  u_int16_t * r_ramp = NULL, * g_ramp = NULL, * b_ramp = NULL;
  unsigned int ramp_size = 256;
  int r_tgt = 255, g_tgt = 191, b_tgt = 0;
  int i;

  dpy = XOpenDisplay(NULL);
  screen = DefaultScreen(dpy);

  /* Set up ramps */
  XF86VidModeGetGammaRampSize(dpy, screen, &ramp_size);
  r_ramp = (unsigned short *) calloc(ramp_size, sizeof(u_int16_t));
  g_ramp = (unsigned short *) calloc(ramp_size, sizeof(u_int16_t));
  b_ramp = (unsigned short *) calloc(ramp_size, sizeof(u_int16_t));
  for (i = 0; i < ramp_size; i++) {
    r_ramp[i] = r_tgt * 256 * i / ramp_size;
    g_ramp[i] = g_tgt * 256 * i / ramp_size;
    b_ramp[i] = b_tgt * 256 * i / ramp_size;
  }
  XF86VidModeSetGammaRamp(dpy, screen, ramp_size, r_ramp, g_ramp, b_ramp);
  XCloseDisplay(dpy);
}

-lX11 -lXxf86vm(リンクが必要です。)

おすすめ記事