2008-10-08 12 views

Répondre

0

.NET offre la méthode statique Image.FromHbitmap. Vous pouvez ensuite utiliser cette image et appeler DrawImage sur l'objet cible Graphics.

+0

Cette méthode ne tire pas de couleur transparente. Voici la question. Comment notifier Gdi + Je veux dessiner exactement bitmap ARGB? –

+1

L'objet GDI + Bitmap a un constructeur qui prend en paramètre Width, Height et PixelFormat. Une fois construit, le bitmap aura la profondeur de bit désirée et inclura un canal Alpha si demandé. –

0

Ah ... mais .Net n'utilise pas HBITMAP et GDI + est une bibliothèque C++ sur le GDI Windows de base, donc je suppose que vous utilisez non.Net C++.

GDI + a une classe Bitmap, qui a une méthode FromHBITMAP(). Une fois que vous avez l'instance Bitmap GDI +, vous pouvez l'utiliser avec la bibliothèque GDI +.

Bien sûr, si vous pouvez écrire votre programme en C# en utilisant .Net, ce sera beaucoup plus facile.

6

J'ai échantillon de travail:

// 1. Informez-vous sur l'aide poignée bitmap: taille de l'image, les bits
BITMAP bmpInfo;
::GetObject(m_hBitmap, sizeof(BITMAP), &bmpInfo);
int cxBitmap = bmpInfo.bmWidth;
int cyBitmap = bmpInfo.bmHeight;
void* bits = bmpInfo.bmBits;

// 2. Créer & GDI + nouveau tirage bitmap à l'aide bits avec le format de pixel PixelFormat32bppARGB
Gdiplus::Graphics graphics(dcMemory);
Gdiplus::Bitmap bitmap(cxBitmap, cyBitmap, cxBitmap*4, PixelFormat32bppARGB, (BYTE*)bits);
graphics.DrawImage(&bitmap, 0, 0);

0

moi avons eu des problèmes similaires obtenir mon tran canal sparent à travailler. Dans mon cas, je savais quelle couleur d'arrière-plan devrait être utilisée pour la zone transparente (elle était solide). J'ai utilisé la méthode Bitmap.GetHBITMAP (..) et passé dans la couleur d'arrière-plan à utiliser pour la zone transparente. C'était une solution beaucoup plus facile que d'autres tentatives que j'essayais d'utiliser LockBits et de recréer le bitmap avec PixelFormat32bppARGB, ainsi que le clonage. Dans mon cas, le Bitmap ignorait le canal alpha depuis qu'il a été créé à partir de Bitmap.FromStream.

J'ai également eu quelques problèmes très étranges avec la zone d'arrière-plan de mon image étant légèrement modifiée. Par exemple, au lieu de blanc pur, il était blanc comme 0xfff7f7. C'était le cas si j'utilisais JPG (avec des couleurs mélangées) ou avec PNG et des couleurs transparentes.

Voir ma question et la solution à

GDI+ DrawImage of a JPG with white background is not white

Questions connexes