以前は、ユーザーのカスタムタイルイメージを表示したCredentialProvider for Windows 7を作成しました。私のCredentialProviderをWindows 10でテストしたところ、通常のWindowsユーザーイメージと同じようにタイルイメージが丸くないことに気づきました。私は自分の丸いイメージに透明性を持たなければなりません。私は丸い形の透明なPNGをロードし、対応するHBITMAP
をICredentialProviderCredentiall::GetBitmapValue()
関数に渡そうとしました。残念ながら、透明ではなく、PNGの背景が白です。実際の透明性を示す方法はありますか? HBITMAP
はLogonUI自体によって描画されるため、描画動作を変更することはできません。私のPNGリソースのうち、HBITMAP
を作成するにはWindows 10 CredentialProviderタイルイメージの透明度
は、私は次の関数を使用します。
HBITMAP LoadPNG(HINSTANCE hInst, int resourceId)
{
HGLOBAL hGlobal;
LPSTREAM pStream;
HBITMAP tBmp = NULL;
ULONG_PTR token = 0;
Gdiplus::GdiplusStartupInput input = NULL;
Gdiplus::GdiplusStartup(&token, &input, NULL);
if (token != 0)
{
HRSRC hRsrc = FindResource(hInst, MAKEINTRESOURCE(resourceId), TEXT("PNG"));
HGLOBAL hGlob1 = LoadResource(hInst, hRsrc);
int size = SizeofResource(hInst, hRsrc);
hGlobal = GlobalAlloc(GMEM_FIXED, size);
LPVOID resPtr = LockResource(hGlob1);
memcpy(hGlobal, resPtr, size);
FreeResource(hGlob1);
CreateStreamOnHGlobal(hGlobal, true, &pStream);
Gdiplus::Bitmap* bmp = new Gdiplus::Bitmap(pStream, false);
bmp->GetHBITMAP(Gdiplus::Color::Transparent, &tBmp);
Gdiplus::GdiplusShutdown(token);
}
return tBmp;
}
を私はまた、このようなAlphaMask
やAlphaShift
などGetHBITMAP()
背景色パラメータの他の値を試してみましたが、これらはどちらか動作しませんでした(代わりに、白い背景が黒くなります)
私の目標を達成する方法はありますか?
'Bitmap'オブジェクトにはアルファチャンネルが含まれていますか? 'IStream * 'を取っている人は、ARGBとPARGBの間を決めることができず、単純にアルファチャンネルを捨てるだけです。 [Image :: GetFlags](https://msdn.microsoft.com/en-us/library/ms535376.aspx)を呼び出し、 'ImageFlagsHasAlpha'と' ImageFlagsHasTranslucent'を確認することでアルファチャンネルの存在を確認しました[ ImageFlags](https://msdn.microsoft.com/en-us/library/ms534136.aspx)? – IInspectable
それは明らかに 'ImageFlagsHasAlpha'を持っていますが、' ImageFlagsHasTranslucent'フラグはありません。 – Adrian
コードをもう一度見て、GDI 'HBITMAP'を返すように見えます。 [Bitmap :: GetHBITMAP](https://msdn.microsoft.com/en-us/library/ms536295.aspx)のドキュメントは多くのことを望んでいますが、完全に不透明なイメージを構築しているかのように見えますソース画像、アルファチャンネル、および背景色をパラメータとして構築されています。 GDIビットマップ - 例外はほとんどありません(例:[AlphaBlend](https://msdn.microsoft.com/en-us/library/dd183351.aspx)) - アルファチャンネルを使用したりサポートしたりしないでください。 – IInspectable