2016-05-02 9 views
1

以前は、ユーザーのカスタムタイルイメージを表示したCredentialProvider for Windows 7を作成しました。私のCredentialProviderをWindows 10でテストしたところ、通常のWindowsユーザーイメージと同じようにタイルイメージが丸くないことに気づきました。私は自分の丸いイメージに透明性を持たなければなりません。私は丸い形の透明なPNGをロードし、対応するHBITMAPICredentialProviderCredentiall::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; 
} 

を私はまた、このようなAlphaMaskAlphaShiftなどGetHBITMAP()背景色パラメータの他の値を試してみましたが、これらはどちらか動作しませんでした(代わりに、白い背景が黒くなります)

私の目標を達成する方法はありますか?

+0

'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

+0

それは明らかに 'ImageFlagsHasAlpha'を持っていますが、' ImageFlagsHasTranslucent'フラグはありません。 – Adrian

+0

コードをもう一度見て、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

答えて

0

最新Credential Provider Technical Referenceは(MSDN上で見つけるのはそれほど簡単ではないです)、実際にタイル画像の問題が何であるかを伝えます。Windows 10では

、選択したユーザー/ V1/PLAPの資格プロバイダが持っています イメージのサイズは192x192です。左下のリストにあるものは48x48です。 メモLogonUIは、新しいデザインの指示に従って、ユーザーに円形イメージを使用し、正方形イメージをV1/PLAP に使用します。 V2の資格情報の資格情報 選択したユーザーのプロバイダタイルは48x48です。

-2

ドキュメントを正しく読んでいれば、LogonUIはV1/PLAPではなく、GetSerialization呼び出しでダミーのユーザーを返すことができると思います。