3

GDIPlusを使用して表示したい部分的なアルファ(0から255までのアルファ値)のアイコンがあります。直接ファイル名を取得するGDI+のビットマップコンストラクターを使用すると、ファイルは正しく表示されます。ただし、リソースからロードする場合、アルファの認識に問題があります。MSDNを調べましたが、アルファ版に問題があります:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms536318.aspx。アイコンからICONINFO構造を取得することで、完全に透明なピクセルを取り除くことができますが、部分的に透明なピクセルは、完全に不透明または完全に透明として表示されます。

部分的なアルファ値を使用して、リソース内のアイコンからWin32ビットマップを作成する方法を知りたいと思いました。

4

2 に答える 2

3

LoadResourceを使用して、アイコンとその画像データへのポインターを取得できます。画像データへのポインタを適切なビットマップコンストラクタに渡すことができます。アイコンには固有のリソース形式があるため、これは少し面倒です。

可能であれば、画像を透明な(つまり、32bpp argb)ビットマップとして保存する方が簡単です。この場合、LR_CREATEDIBSECTIONでLoadImageを使用できます。

アップデート

どうやらLoadIconはアルファを正しくロードします。問題は、HICONからGdiPlus :: Bitmapを作成するときに、GdiPlusがアルファを尊重しないことであるように思われます。あなたにできることは:

  • LoadIconを使用してアイコンをロードします。
  • GetIconInfoを使用してICONINFOを取得します。hbmColorは、透明なビットマップのハンドルです。
  • GetDIBitsを使用して、hbmColorからビットマップビットを取得します。
  • ビットを受け取り、アルファを理解するビットマップコンストラクターにデータを渡します。
于 2012-09-20T14:25:54.660 に答える
1

LoadIconを呼び出した後、アルファチャネルが妨害されます。LoadIcon、LoadImageなどのアイコンをロードするWin32APIは十分に証明されています。部分的なアルファを使用してアイコンを確実にロードします。

アイコンがロードされた後に実行されるコードを調査する必要があります。解決策や説明はできませんが、LoadIconが原因ではないと確信しています。

部分的なアルファ値を使用して、リソース内のアイコンからWin32ビットマップを作成する方法を知りたいと思いました。

GetIconまたはGetImageを呼び出して、HICONを取得します。次に、GetIconInfoを呼び出します。必要なビットマップは、ICONINFO構造体のhbmColorフィールドにあります。

于 2012-09-21T07:04:30.777 に答える