VC++MFC サンプルコード (Visual Studio 2022)
imageEditor
Windows11
DirectX11のピクセルシェーダーとコンピュート・シェーダー(CS)を利用して、
高速でガンマ補正、明度、
コントラスト、彩度、ブラー、シャープネス調整を行います。
また、処理結果をCImageバッファーへコピーし、フォーマット変換セーブも可能です。
ピクセルシェーダー(PS)は、テクスチャ(画像)のスクリーンに表示される部分
を高速に処理できます。
このことを利用しPSでガンマ補正、明るさ、コントラスト、彩度、
ブラー、シャープネスなどの処理を行い、
モニタリングを高速化します。
しかし、PSはピクセル単位で処理をするため、ブラーなどのように周囲のピクセル
を考慮しなければならない
場合は、
繰り返し処理の中でガンマ補正処理とブラーを同時に行う必要があります。
そのため、負担が大きくなり
処理スピードが
遅くなるため、ここでは先にブラー処理をし、その後でガンマ補正を行います。
処理中は、コンピュートシェーダー(CS)はUAVバッファ(読み書き可能バッファ)
を用いて、高速化のため
フルサイズ画像をリサイズして、
ヒストグラム・データを作成します。
また、CSはUAVテクスチャ(読み書き可能テクスチャ)を用いて、フルサイズ画像に
対して全ての処理を実施し、
Stagingテクスチャを用いてCImage
バッファにコピーし、実際のセーブはCImageで行います。
モニタリング中の画像とセーブ画像の差は見た目では分かりませんが、
セーブ画像が正式なものとなります。
■主な機能
・トーンカーブによる、ガンマ補正
・明度、コントラスト、彩度、ブラー、シャープネス調整
・対応フォーマットは、jpg,bmp,png,tif,標準的なRAW
・ロード可能画像サイズ、16000×16000pixel
・スクリーンのセンター中心の、マウスホイールによるズーム、視点移動(フォブ変換使用)
・マウスドラッグによる、スクロール、クリッピング(フォブ変換使用)
・DirectX座標系から、スクリーン座標系へのフォブ逆透視変換
・スクリーン座標系から、DirectX座標系へのフォブ透視変換
・フォーマット変換セーブ
■特徴
すべてクラス化しているので、個別の応用も可能です。
・MFCメイン
・ボタンクラス
・エディター(パラメーター作成)クラス
・DirectC11のDeviceのイニシャライズクラス
・DrectX11の描画クラス
・コンピュートシェーダーのイニシャライズおよび実行クラス
・WICTextureLoaderクラス
・共有ヘッダー(Deviceポインタの貸出倉庫)
<内容>
・imageEditor.exe 実行ファイル
コンパイル済シェーダー
・VS.cso バーテックスシェーダー
・PS.cso ピクセルシェーダー
・gammaCS.cso ガンマCS(コンピュートシェーダー)
・downscaleCS.cso ダウンスケールCS
・boxbluCS.cso ボックスブラーCS
・upscaleCS.cso アップスケールCS
・sharpnessCS.cso シャープネスCS
・histCS.cso ヒストグラムCS
・README.md
■
※ソースファイルおよびソリューションファイルは、
Boothにて入手可能です(有料です)。