OVH Cloud OVH Cloud

Creer un bitmap vierge en memoire

7 réponses
Avatar
Stephane Legras-Decussy
bonjour,

j'arrive bien a creer un device context en memoire,
lui affecter un bitmapfromfile,
et dessiner par dessus...

par contre je ne parviens pas à creer un device context en memoire,
creer un bitmap vierge ( createcompatiblebitmap )
l'associer au HDCmem, et dessiner dessus...

j'obtiens un dessin noir&blanc superposé à des motif aleatoires (je suppose
que c'est une non-initialisation du bitmap)...

j'ai pas mal googlisé et je ne trouve pas...comment faire ?

(je précise que je regarde ce que j'obtiens sur le HDCmem
en le blittant sur le HDC client au final)

Merci !







--

7 réponses

Avatar
Remi Thomas
"Stephane Legras-Decussy" écrivit
bonjour,

j'arrive bien a creer un device context en memoire,
lui affecter un bitmapfromfile,
et dessiner par dessus...

par contre je ne parviens pas à creer un device context en memoire,
creer un bitmap vierge ( createcompatiblebitmap )
l'associer au HDCmem, et dessiner dessus...

j'obtiens un dessin noir&blanc superposé à des motif aleatoires (je
suppose
que c'est une non-initialisation du bitmap)...

j'ai pas mal googlisé et je ne trouve pas...comment faire ?




Bonjour,

Voici un exemple en MFC.
En Win32 il faut ajouter la destruction des objets crées

void CQuery::OnDraw(CDC* pDC)
{
CSize size = GetTotalSize();
CBitmap bitmap;
CDC memDC;
memDC.CreateCompatibleDC(pDC); // Creation du Memory DC
bitmap.CreateCompatibleBitmap(pDC, size.cx, size.cy); // Creation du bitmap
CBitmap* oldBitmap = memDC.SelectObject(&bitmap);

memDC.SelectObject(GetStockObject(BLACK_PEN));
memDC.SelectObject(GetStockObject(WHITE_BRUSH));
memDC.Rectangle(0, 0, size.cx, size.cy); // Effacer le bitmap

pDC->BitBlt(0, 0, size.cx, size.cy, &memDC, 0, 0, SRCCOPY); // Copier le
bitmap sur l'écran
memDC.SelectObject(oldBitmap);
}

Rémi

--
Rémi Thomas - MVP Visual Studio .NET
Développeur Windows indépendant
http://www.xtware.com/cv
Avatar
Christian ASTOR
Stephane Legras-Decussy wrote:

par contre je ne parviens pas à creer un device context en memoire,
creer un bitmap vierge ( createcompatiblebitmap )
l'associer au HDCmem, et dessiner dessus...



{
HDC hDC = GetDC(NULL);
HDC hDCMem = CreateCompatibleDC(NULL);
// Bitmap couleur (hDCMem si monochrome)
HBITMAP hBitmap = CreateCompatibleBitmap(hDC, 100, 100);
HBITMAP hBitmapOld = (HBITMAP)SelectObject(hDCMem, hBitmap);
RECT rect = {0, 0, 100, 100};
FillRect(hDCMem, &rect, GetSysColorBrush(COLOR_INACTIVECAPTION));
Ellipse(hDCMem, 10, 10, 90, 90);
// Pour test
BitBlt(hDC, 0, 0, 100, 100, hDCMem, 0, 0, SRCCOPY);
// Release
SelectObject(hDCMem, hBitmapOld);
DeleteDC(hDCMem);
ReleaseDC(NULL, hDC);
// Utiliser hBitmap ensuite...
}

+ Petzold...
Avatar
Stephane Legras-Decussy
Christian ASTOR a écrit dans le message :
42204fd7$0$309$
HBITMAP hBitmap = CreateCompatibleBitmap(hDC, 100, 100);



Mille merçi, je passais le hdcmem au lieu du hdc...
c'est etrange ce comportement de passer en monochrome suivant
le handle...
Avatar
Christian ASTOR
Stephane Legras-Decussy wrote:

c'est etrange ce comportement de passer en monochrome suivant
le handle...



C'est précisé ds la doc =>
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_1cxc.asp

"Note: When a memory device context is created,
it initially has a 1-by-1 monochrome bitmap selected into it ... etc..."
Avatar
Stephane Legras-Decussy
Christian ASTOR a écrit dans le message :
42220609$0$310$
C'est précisé ds la doc =>



http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps
_1cxc.asp

effectivement cette doc est limpide...
la mienne est moins complete, c'est un .hlp issu de borland...

on peut telecharger quelque part le fichier intégral msdn des specs win32 ?
Avatar
castorix
"Stephane Legras-Decussy" wrote in message news:<42227a59$1$24820$...

on peut telecharger quelque part le fichier intégral msdn des specs win32 ?



Le Win32.hlp a été remplacé par les .chm de la PSDK (WinUI, GDI,
ShellCC, etc...) ... depuis au moins 6 ans.
Avatar
AMcD®
Christian ASTOR wrote:

Le Win32.hlp a été remplacé par les .chm de la PSDK (WinUI, GDI,
ShellCC, etc...) ... depuis au moins 6 ans.



Dont il trouvera la preuve ici :

http://ftp2.skynet.be/pub/ftp.microsoft.com/platformsdk/oct2000/common/Help/

--
AMcD®

http://arnold.mcdonald.free.fr/