PokemonFlash

起動するとデスクトップ全体が虹色に明滅しはじめる、Windows のネタプログラムです。名前の由来は readme に貼られた電脳戦士ポリゴン(ポケモンショック)の Wikipedia リンクで、あの点滅をモニタのガンマ操作で再現します。

仕組み

ウィンドウは作るものの非表示のままで、画面には何も出しません。WM_CREATE で 10ms のタイマーを仕掛け、tick ごとに SetDeviceGammaRamp で画面全体のガンマランプを書き換えます。ガンマは R/G/B それぞれ

gammaR = sin(θ + 1.0) + 1.5
gammaG = sin(θ + 0.5) + 1.5
gammaB = sin(θ + 0.0) + 1.5    (θ は tick ごとに +0.2 rad)

で揺らされ、各チャンネルが 0.5〜2.5 の間を周期約 314ms(タイマー公称値換算)で正弦波往復します。位相が 0.5 rad ずつずれているので、単なる明滅ではなく色被りが回りながら明滅するのがポイント。ランプは ((i+1)/256)^(1/γ) × 65536 の LUT をハードウェアに流し込む方式なので、どんなウィンドウを開いていても画面全体が対象になります。

終了のしかた

メッセージループはありません。起動直後に出る「Quit?」の MessageBox のモーダルループがタイマーメッセージを回し続ける構造で、この確認ダイアログが実質メインループです。OK を押すとガンマを 1.0 に戻して終了します(Mutex による多重起動防止つき)。

再現イメージ

当時のスクリーンショットは残っていないため、下のアニメーションは上記のガンマ変換式を AI がグレーのデスクトップ模式図に適用した創作イメージです(実際の画面ではありません)。実物の点滅は約 3.1Hz と光過敏性発作ガイドラインの閾値を超えるため、ここでは 1/4 速(約 0.8Hz)に減速してあります。本物は"この 4 倍速"で光ります。

PokemonFlash のガンマ変調の AI による再現アニメーション(1/4 速)