GDI+ を使用してさまざまな色を描画します。
brush = new SolidBrush(color);
graphics.FillRectangle(brush, x, y, width, height);
ガラス上では不透明な色が適切に表示されないことがわかります。
ガラスに単色を描くにはどうすればよいですか?
また、完全に不透明な色は、その色に応じて異なる方法で処理されることにも気付くでしょう。
- 不透明な黒: 完全に透明
- opaque color: 部分的に透明
- 不透明な白: 完全に不透明
さまざまな色がどのように処理されるかを説明しているデスクトップ コンポジターのドキュメントを誰か教えてもらえますか?
アップデート 3
FillRectangle
の動作が とは異なることにも気付くでしょうFillEllipse
:
FillEllipse
不透明な色で不透明な色を描くFillRectangle
不透明な色で描画すると、部分的に (または完全に) 透明になります
無意味な行動の説明をお願いします。
更新 4
Alwayslearningは、合成モードを変更することを提案しました。MSDNから:
CompositingMode 列挙体
CompositingMode列挙体は、レンダリングされた色を背景色と組み合わせる方法を指定します。この列挙は、 Graphicsクラスの 'Graphics::SetCompositingMode'メソッドによって使用さ
Graphics::GetCompositingMode
れます。CompositingModeSourceOver
色をレンダリングするときに背景色とブレンドすることを指定します。ブレンドは、レンダリングされる色のアルファ コンポーネントによって決定されます。
CompositingModeSourceCopy
色がレンダリングされるときに背景色を上書きすることを指定します。このモードは、TextRenderingHintClearTypeGridFit と一緒に使用することはできません。
の説明からCompositingModeSourceCopy
、それは私が望むオプションではないように思えます。それが課す制限から、それは私が望むオプションのように思えます. そして、構成、または透明度が無効になっている場合、 SourceBlendではなくSourceCopyを実行するため、必要なオプションではありません。
幸いなことに、それは私の実際の問題を解決しないので、私が考えなければならない悪ではありません. オブジェクトを作成した後graphics
、合成モードを変更してみました:
graphics = new Graphics(hDC);
graphics.SetCompositingMode(CompositingModeSourceCopy); //CompositingModeSourceCopy = 1
結果は出力に影響しません。
ノート
- Win32 ネイティブ
- .NET ではない (ネイティブ)
- Winforms ではない (すなわちネイティブ)
- GDI+ (ネイティブ)