Bitmap à partir d'une fenêtre... Help!

Résolu
cs_Zekez
Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
26 septembre 2006
- 29 mars 2005 à 15:25
MorpionMx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
- 30 mars 2005 à 15:03
Bonjour,

je suis en train de faire une application en C# dans laquelle j'ai besoin d'insérer une sorte de printscreen d'une fenêtre dans une bitmap... Donc faire une copie graphique d'une Form et la placer dans une bitmap.

Je ne sais pas du tout comment je peux faire ça, je sais que la méthode bitmap reçoit un paramètre Image... il faudrait alors créer un objet Image mais le problème est tjs le même, je ne sais pas faire le "printscreen" pour remplir l'objet Image...

Merci de bien vouloir m'aider si quelqu'un a une soluce.

4 réponses

MorpionMx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
57
29 mars 2005 à 21:43
Ceci va te permettre de capturer la forme (ou le control plutot) depuis lequel tu l'appeles, et mettre le resultat dans un leBitmap bmp)

// Les variables Win32
private int WM_PRINT = 0x0317;
private int PRF_CHECKVISIBLE = 0x00000001;
private int PRF_NONCLIENT = 0x00000002;
private int PRF_CLIENT = 0x00000004;
private int PRF_ERASEBKGND = 0x00000008;
private int PRF_CHILDREN = 0x00000010;
private int PRF_OWNED = 0x00000020;

// Le code
Bitmap bmp = new Bitmap(this.Width, this.Height);
Graphics bmpGraphics = Graphics.FromImage(bmp);
IntPtr bmpHdc = bmpGraphics.GetHdc();


Message msg = new Message();
msg.Msg = WM_PRINT;
msg.HWnd = this.Handle;
msg.WParam = bmpHdc;
msg.LParam = new IntPtr(PRF_NONCLIENT | PRF_CLIENT | PRF_ERASEBKGND | PRF_CHILDREN | PRF_OWNED);
this.WndProc(ref msg);


bmpGraphics.ReleaseHdc(bmpHdc);
bmpGraphics.Dispose();

Tu as plus qu'a dessiner ton bmp !
Mx
3
cs_Zekez
Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
26 septembre 2006

30 mars 2005 à 00:17
C'est super, je suis arrivé à faire tout ce que je voulais à partir de ça!

Un grand merci pour l'aide!
0
cs_Zekez
Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
26 septembre 2006

30 mars 2005 à 14:52
Peut-être une petite question...

Je ne sais pas ce que sont exactement ces variables Win32... qu'est-ce qu'elles représentent exactement dans le code? (Pour que je puisse placer des commentaires)

private int WM_PRINT = 0x0317;
private int PRF_CHECKVISIBLE = 0x00000001;
private int PRF_NONCLIENT = 0x00000002;
private int PRF_CLIENT = 0x00000004;
private int PRF_ERASEBKGND = 0x00000008;
private int PRF_CHILDREN = 0x00000010;
private int PRF_OWNED = 0x00000020;

Merci.
0
MorpionMx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
57
30 mars 2005 à 15:03
Ce sont des constantes Win32 qui correspondent a des messages.

Si tu utilises Visual Studio, tu peux retrouver ces constantes dans ton dossier VC7\platform sdk\include\WinUser.h

Mx
0