Aeroガラス効果を使用するアプリケーションがあるため、各ピクセルには、赤、緑、青の値に加えてアルファ値があります。背景が白一色(アルファ= 255)のカスタム描画コントロールが1つあります。GDIテキスト関数を使用してコントロールにソリッドテキストを描画したいと思います。ただし、これらの関数はアルファ値を任意の値に設定するため、アプリケーションの下にあるウィンドウがテキストに半透明で表示されます。
テキストのレンダリングを呼び出した後、コントロール内のすべてのピクセルを調べて、それらのアルファ値を255に戻したいと思います。これを行うための最良の方法は何ですか?
BitBlt
、、、GetPixel
およびSetPixel
関数については運がありませんでした。彼らはアルファ値に気づいていないように見えます。
これが私が検討して拒否した他の解決策です:
- ビットマップに描画してから、ビットマップをデバイスにコピーします。このアプローチでは、テキストレンダリングはモニターの特性(ClearTextなど)を利用しません。GDIでテキストをビットマップにレンダリングする方法を知っている場合は、画面にレンダリングするのとまったく同じように、それで問題が解決します。
- テキストレンダリングにGDI+を使用する:このアプリケーションは、元々テキストレンダリングにGDI +を使用していました(Aeroサポートの作業を開始する前)。GDI +で文字列を正確に測定しようとして問題が発生したため、GDIに切り替えました。切り替えたくない。
- 問題のコントロールを回避するようにAeroリージョンを設定します。私のアプリケーションのウィンドウは、実際には別のプロセスで実行されている別のアプリケーションの子ウィンドウです。トップレベルウィンドウのAero設定を直接制御することはできません。
アプリケーションはWindowsフォームを使用してC#で記述されていますが、私はInteropを使用してWin32API関数を呼び出すことはできません。