Comment Créer un Gdiplus::Bitmap à partir d'un HBITMAP, en conservant les informations de canal alpha?
Quand je crée un nouveau Gdiplus::image Bitmap à l'aide de l'image Bitmap::FromHBITMAP fonction,
l'image résultante est opaque - absence de la transparence partielle à partir de l'original HBITMAP est préservée.
Est-il un moyen de créer un Gdiplus::Bitmap à partir d'un HBITMAP qui apporte à travers les données de canal alpha?
Savez-vous pour s'assurer que le HBITMAP a un canal alpha pour commencer? Par exemple, avez-vous créer un DIB avec BI_RGB et 32bpp ou d'une autre façon?
Oui, il n'y a transparence. Il tire bien à l'aide de l' ::AlphaBlend() fonction.
(Je l'ai créé en C# à l'aide de new Bitmap(string filename) et de l'appel GetHBitmap() sur l' .NET objet bitmap)
Oui, il n'y a transparence. Il tire bien à l'aide de l' ::AlphaBlend() fonction.
(Je l'ai créé en C# à l'aide de new Bitmap(string filename) et de l'appel GetHBitmap() sur l' .NET objet bitmap)
OriginalL'auteur mackenir | 2008-12-02
Vous devez vous connecter pour publier un commentaire.
Je pense que code de travail est plus utile que les instructions, afin:
CBitmap
, à partir de laquelle j'ai récupéré leHBITMAP
. Dans ce cas::GetObject()
gauchesource_info.bmBits
la valeur NULL. J'ai pu résoudre ce problème en appelantmyCBitmapPtr->GetBitmapBits(source_info.bmWidthBytes * source_info.bmHeight, target_info.Scan0)
BTW, les valeurs de retour sont bien vérifié dans votre exemple, mais si
source_info.bmBits
est NULLE, il y a une violation d'accès dans l'appel àCopyMemory()
.OriginalL'auteur Geoffrey Elliott
Il s'avère que GDI+ n'apporte jamais à travers le canal alpha lors de la création d'un Bitmap à partir d'un HBITMAP.
La réponse est:
Dans mon cas, le format de l'entrée HBITMAP est correct pour faire une quinte memcpy de l'entrée des données de pixels d'image bitmap à la nouvelle image de données de pixel.
Si vous n'avez pas obtenir de l'entrée de données de pixel d'GetObject, GetDIBits pour obtenir une copie dans le format correct.
OriginalL'auteur mackenir