私は、レイヤードウィンドウを使用して、画面上に丸い四角形を描画しています。しかし、私はギザギザのエッジを滑らかにしたいと思います。私はこれにアルファブレンディングが必要だと思います。 GDIでこれを行う方法はありますか?GDIを使用してオンザフライでアルファチャンネルを使用してビットマップを作成するにはどうすればよいですか?
答えて
CreateDIBSection。 BITMAPINFOHEADERに32bppを入力します。あらかじめ乗算されたアルファでアルファチャンネルを入力してください。
AlphaBlendは実際aplhaチャネルと32のBPPビットマップをブリットするためのAPIです。
あなたは(説明のためにthis questionを参照)BitmapクラスのするLockBitsメソッドを使用してC#でこれを行うことができます。これはGetPixelとSetPixelを使用したくないということです。(ビットマップ全体ではなく、エッジを操作していても)ぞっとするほど遅いです。
GDIコールだけで簡単に描画することはできません。あなたが望むのはアルファブレンディングだけではありません。アンチエイリアスが必要です。これには、通常、より大きな解像度で描画して縮小することが含まれます。私は同様の問題のために、過去に何をやったか
は、私は黒と白で、それを必要以上に大きく(例えば、丸みを帯びたコーナーを)好きな形状描画するアートプログラムを使用することです。私はそれを描画したいと思ったときに、黒と白のビットマップを私が望むどのようなサイズにもスケールアップしました(scaling class from Code Projectの亜種を使用)。これにより、アルファチャンネルとして使用できるグレースケール画像が得られます。アルファブレンディングは、AlphaBlendを呼び出すか、DIBSectionを使用して適切なピクセルを手動で変更してアルファブレンディングに使用します。
このアプローチの別のバリエーションは、最終結果が望むよりも約4倍大きいDIBSectionを割り当て、それを描画し、上記のスケーリングクラスを使用してスケーリングすることです。適切なスムージング効果。
このすべては、仕事のかなり多くのように聞こえる場合:まあ、それはです。
編集:この質問のタイトルに答えるために:あなたはCreateDIBSectionを呼び出すことによって、アルファチャンネル付きビットマップを作成することができます。それは自分では望んでいないことだと思います。
私は今日の午後にMSDNを精練しながらCreateDIBSectionを見つけました。それは欠けているようです。アンチエイリアス処理された線や円を描画するにはWuの線/円アルゴリズムを使用します。私が実際のピクセルデータにアクセスできる限り、私はそれを私が望むものに設定することができます。そしてあなたは正しい。それは多くの仕事になっています! ; p – wkf
あなたは基本的にそこにいるように聞こえます。 DIBセクションはグラフィックス作業に最適です:HBITMAPハンドルを取得しますが、生のピクセルデータにもアクセスできます。 – DavidK
アンチエイリアスは「縮小」されていませんが、スムーズな外観を得るために、斜めに塗りつぶしたピクセルを追加しています。追加されたピクセルにアルファ成分がある場合(アルファブレンディングを使用している場合など)、これはより効果的です。 – Eric
GDI+を使用しての代わりに、GDIの任意のチャンス?これは、すぐにアンチエイリアスと透過性をサポートします。
- 1. .NETビットマップでGDI +ぼかし効果を使用するにはどうすればよいですか?
- 2. BITMAPV5HEADERヘッダーを使用してビットマップを作成するにはどうすればよいですか?
- 3. CでGDIを使用して画像をレンダリングするにはどうすればよいですか?
- 4. GDI +を使用してリソースからイメージをロードするにはどうすればよいですか?
- 5. C++、GDI +、ビットマップをロードし、UpdateLayeredWindowを使用してビットマップを表示
- 6. XPでGDI + 1.0を使用し、Vista/Win7で1.1を使用するプログラムを作成するにはどうすればよいですか?
- 7. JSONをデータソースとして使用してサブグループを作成するにはどうすればよいですか?
- 8. Win32/GDI(可能であればGDI +なし)を使用してPNGイメージをロードするにはどうすればよいですか?
- 9. wpfでdatavalidationを使用してカスタム動作を作成するにはどうすればよいですか?
- 10. OpenCVSharpを使用してMatをビットマップに変換するにはどうすればよいですか?
- 11. マトリックスを使用してビットマップをキャンバス上に配置するにはどうすればよいですか?
- 12. MVCを使用してPHPアプリケーションを作成する。複数のモデルを使用してページを作成するにはどうすればよいですか?
- 13. 継承を使用して汎用クラスを作成するにはどうすればよいですか?
- 14. qiを使用して汎用パーザを作成するにはどうすればよいですか?
- 15. p:panelGridを使用して個人用配信を作成するにはどうすればよいですか?
- 16. Android用AWSを使用してフレンドシステムを作成するにはどうすればよいですか?
- 17. AJAX&Cを使用してオンザフライでPDFを作成する#
- 18. select intoを使用してオンザフライでテーブルを作成する
- 19. Objective-Cを使用して新しいNSWindowを作成するにはどうすればよいですか?
- 20. Android - ビットマップを使用してメモリオーバーロードを回避するにはどうすればよいですか?
- 21. PNG形式を使用してビットマップを圧縮するにはどうすればよいですか?
- 22. .NET CF 2.0を使用してビットマップのPixelFormatを取得するにはどうすればよいですか?
- 23. JSFでサーブレットにリクエストパラメータを使用してリンクを作成するにはどうすればよいですか?
- 24. JAVAを使用してイベントハブをプログラムでコンシューマグループを作成するにはどうすればよいですか?
- 25. 作成しているフレームワークでFirebaseを使用するにはどうすればよいですか?
- 26. WinAPIを使用して「はい」ボタンを作成するにはどうすればよいですか?
- 27. VBScriptを使用して作成したテキストファイルを表示するにはどうすればよいですか?
- 28. 列見出しを使用してフォーラムを作成するにはどうすればよいですか?
- 29. APIを使用してカスタマイズしたbit.ly URLを作成するにはどうすればよいですか?
- 30. react-select(stackoverflowなど)を使用してカスタムドロップダウンを作成するにはどうすればよいですか?
悲しいことに、私は管理された言語を使用していません。私は、バニラWindows APIを使用する必要があります。 – wkf
それは、私だけではありません。 =) – MusiGenesis