HDRスクリーンショット復元

白飛び・色あせしたWindows HDRスクショをSDR・HDRに復元

HDRスクリーンショットをここにドロップ

またはクリックして選択 · PNG · JPG · AVIF · WebP · JXR

撮ったスクリーンショットは Ctrl+V で直接貼り付けできます

HDRスクリーンショット復元について

WindowsでHDRを有効にしたままスクリーンショットを撮ると、画像全体に灰色の膜がかかったように白っぽくなるか、明るい部分が白く飛んでしまうことがよくあります。このツールはファイルを読み込んで損傷の種類を診断し、合ったプリセットでどこでも正しく見えるSDR画像と、補正済みのHDR PNGを作ります。

どこまで戻せるかはファイルに何が残っているかで決まります。Xbox Game Barが保存する.jxrやHDR PNG・AVIFのように実際のHDRデータが残っていればハイライトまで復元できますが、8ビットPNGで255に切り詰められた部分の元のディテールはどのツールでも取り戻せません。

HDR画面のスクリーンショットが白っぽくなる理由

HDRを有効にすると、WindowsはscRGBという線形の浮動小数点空間で画面を合成します。ここでは1.0が80ニトに相当し、それより明るいハイライトは2.0や6.0のように1を超える値で表されます。通常のアプリ(SDRコンテンツ)は設定の「SDRコンテンツの明るさ」に応じてこの空間に配置されます。

問題は、キャプチャ経路がこのデータを8ビットsRGBに変換するときに適切なトーンマッピングを行わない場合です。明るさの範囲をそのまま押し込むと黒が浮いて彩度が抜けた「白っぽい」画像に、1を超える値を切り捨てるとハイライトが白飛びした画像になります。症状はキャプチャツール、ドライバー、Windowsのバージョンによって異なります。

損傷の見分け方

まずファイル先頭のバイトで形式を判別し(JXR・PNG・JPEG・AVIF・WebP)、cICPチャンクのあるPNGはHDRとしてPQカーブを解いて実際の輝度に戻します。すべての入力を「線形Rec.2020、1.0=ディフューズホワイト」という共通形式に変換してから分析します。

見る値は4つです。最も明るいピクセルがディフューズホワイトの何倍か(ヘッドルーム)、1チャンネルでもクリップしたピクセルの割合、3チャンネルとも飛んだ割合、平均彩度です。ヘッドルームが1.05を超えれば本物のHDRとしてトーンマッピングを、完全な白が2%または片チャンネルのクリップが8%を超えれば「白飛び」プリセットを選びます。「白っぽい」は平均彩度0.16未満で、かつ黒浮きか白の圧縮がある場合に限って判定します。

トーンマッピングと色の変化

HDR入力はReinhard、Hableフィルミック、ACES近似のいずれかで圧縮します。暗部はほぼそのままに、明るいほど増え方を抑え、トーンマップホワイト(W)でちょうど1.0になるようにします。プリセットはWを測定したヘッドルームの0.9倍(2.5〜12の範囲)に設定します。

カーブはチャンネルごとではなく輝度だけに適用し、R・G・Bは同じ比率でまとめて縮めます。そのためネオンのオレンジのような明るく鮮やかな色も、色相が黄色寄りに動きません。縮めた後も一つのチャンネルが表示範囲を超える場合は比率を保ったまま全体を下げるので、色相と彩度を守る代わりに少し暗くなります。ハイライトロールオフを上げると明るい部分が白寄りになるため、ハイライトの色があせて見えればロールオフを下げるか、トーンマップホワイトを上げてください。

HDR出力は16ビットPNGにRec.2020・PQを示すcICP値(9, 16, 0, 1)を入れて保存し、ディスプレイの白をITU-R BT.2408の基準白203ニトに合わせます。ChromeやEdgeではHDRで表示されますが、cICPに対応しないビューアではSDR表示や色ずれになることがあります。

例

PQのコード値と実際の明るさ

入力
203ニトと1,000ニトをPQでエンコード
結果
0.58と0.75

PQ(SMPTE ST 2084)は0〜10,000ニトを0〜1に収めます。基準白203ニトは信号の58%、1,000ニトでも75%で、上の25%が1,000〜10,000ニトに使われます。

ヘッドルームからトーンマップホワイトへ

入力
最大1,000ニトのゲームキャプチャ(基準白203ニト)
結果
ヘッドルーム4.93 → トーンマップホワイト4.43

1000÷203=4.93倍。プリセットは0.9を掛けるので、最も明るい1割の範囲が白にまとめられます。

Reinhardはディフューズホワイトをどこへ送るか

入力
W=4、入力1.0 / 2.0 / 4.0
結果
0.53 / 0.75 / 1.00(線形)

x(1+x/W²)/(1+x)で計算します。1.0が0.53になるとsRGBで約193/255となり、白い紙が薄いグレーになります。プリセットがコントラストを少し足すのはこのためです。

使い方

  1. スクリーンショットをドロップするか、Ctrl+Vで貼り付けます。
  2. 診断結果と推奨プリセットを確認し、比較スライダーで元画像と見比べます。
  3. 必要なら露出・彩度・黒点を調整し、SDRまたはHDR PNGで保存します。

よくある質問

どの形式でキャプチャすると一番よく戻りますか?

Win+Alt+PrtScn(Xbox Game Bar)が保存する.jxrです。SDRの白を超える値が残っているので、ハイライトを推測ではなくトーンマッピングで戻せます。

白飛びした部分の文字が戻りません。

8ビットファイルでは255として記録され、元の値が残っていません。白い塊を自然に整えることはできますが、失われたディテールは作れません。

普通の写真を入れたらほとんど変わりません。

損傷の兆候がなければ「問題なし」と判定し、レベルを動かしません。過剰な自動補正で蛍光色になるのを防ぐためです。

出典

基準日:

プライバシーとデータの扱い