Bitmap à partir d'une fenêtre... Help! [Résolu]

Signaler
Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
26 septembre 2006
-
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
-
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

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
49
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
Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
26 septembre 2006

C'est super, je suis arrivé à faire tout ce que je voulais à partir de ça!

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

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.
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
49
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