Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

VIRTUALDC ==> DESSINER SANS PICTUREBOX (BITBLT, PRINT, GRADIENT, ELLIPSE...) AVEC GDI32


Information sur la source

Catégorie :Graphique Classé sous : hdc, bitblt, bitmap, virtualdc, gdi Niveau : Initié Date de création : 25/06/2007 Date de mise à jour : 25/06/2007 16:55:40 Vu / téléchargé: 5 749 / 798

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
Salut, ce code est une classe qui permet de dessiner "en mémoire", donc en se passant d'une picturebox, puis d'appliquer ensuite notre dessin sur un contrôle grâce à son hDC.

L'avantage est évidemment la performance (bien plus rapide que de faire Picture1.Print....).

Cette classe comporte les fonctions suivantes :

- définition d'un Pen pour les dessins
- définition d'un Brush pour les dessins
- CreateMyDC (création du DC)
- PaintToDC (permet d'afficher l'image créée dans un controle)
- DrawImageToVirtualDC (permet d'ajouter une image dans le DC virtuel)
- DrawText (affichage de texte)
- DrawLine (traçage d'une ligne)
- DrawGradient (traçage d'un gradient)
- FillArea (remplissage d'une zone)
- InvertArea (inversion d'une zone)
- CreateFromPictureBox (création d'un DC virtuel directement depuis une PictureBox)
- Cls (efface)
- SetPixel (change la couleur d'un pixel)
- GetPixel (récupère la couleur d'un pixel)
- DrawFocusRect (trace un rectangle de focus)
- DrawEllipse (trace une ellipse)
- DrawRectangle (trace un rectangle)
- DrawRoundRectangle (rectangle à bords arrondis)
- DestroyDC (supprime le DC)



Cela a bien évidemment pour but d'optimiser les dessins (je l'ai fait pour mes vkUserControls).


Je tiens à préciser que je n'ai pas copié/volé le travail de PCPT !!
Je me suis inspiré de son travail (solide) pour débuter dans le domaine de GDI et réaliser ce que je voulais (ensemble complet de fonctions pour dessiner "en mémoire").
Cette source est donc issue du travail de PCPT (http://www.vbfrance.com/code.aspx?ID=43226), dont j'ai repris les fonctions importantes (hDCToPicture et CreateBitmapPicture). Je remercie évidemment PCPT !


Je suis novice dans l'utilisation de GDI, donc il peut manquer des optimisations et avoir des bugs ! N'hésitez pas à commenter et à noter ;)
@+
 

Conclusion

Cela a bien évidemment pour but d'optimiser les dessins (je l'ai fait pour mes vkUserControls).
Cette source est issue du travail de PCPT (http://www.vbfrance.com/code.aspx?ID=43226), dont j'ai repris les fonctions importantes (hDCToPicture et CreateBitmapPicture).


Je suis novice dans l'utilisation de GDI, donc il peut manquer des optimisations et avoir des bugs ! N'hésitez pas à commenter ;)
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

25 juin 2007 16:55:41 :
viré un fichier inutile dans le zip

Commentaires et avis

signaler à un administrateur
Commentaire de romagny13 le 25/06/2007 19:42:43

Bon c'est quand qu'on voit une source de Violent_ken sur CShapfr.com en .net 2.0 :p ?

signaler à un administrateur
Commentaire de violent_ken le 25/06/2007 20:41:22

lol ;)

Faudrait que je quitte ce très cher VB6.... et çà c'est dur ;)
@+

signaler à un administrateur
Commentaire de Charles Racaud le 25/06/2007 21:30:14

en DotNet, ha non pas ca. J'en suis d'ailleurs un peu déçu. Je te verrai beacoup mieux en C/C++.

Bonne métrise des api, beacoups de commentaires.
Très bien, comme d'habitude ^^
__
Kenji

signaler à un administrateur
Commentaire de EBArtSoft le 25/06/2007 21:46:46 administrateur CS

Bien (ouai allez y passez tous a .net c'est trop bien :p )

signaler à un administrateur
Commentaire de BruNews le 25/06/2007 23:22:22 administrateur CS

ok EB, je vais dotnettifier aussi.
Enfin, dès que j'aurai le temps...

signaler à un administrateur
Commentaire de violent_ken le 25/06/2007 23:42:22

Héhé, j'ai dit "Faudrait que je", ce qui veux dire que "pour aller sur CShapfr.com", "faudrait que je" passe au .Net ;)

Mais ce n'est pas à l'ordre du jour ;) Quand je quitterais ce cher VB6 (si çà arrive ^^), ce sera surement pour le C(++).

Merci pour les commentaires !

@+

signaler à un administrateur
Commentaire de Renfield le 26/06/2007 09:50:19 administrateur CS

code survollé

penses a mettre des ByVal de temps à autres...

DrawImageToVirtualDC : pas besoin de faire une copie du Bmp

DrawLine:
- T te sert a rien... passes un ByVal 0&
- pourrais etre pas mal de rendre optionnelles deux coordonnées... permettrais de chainer :
    Drawline 0,0,50,50
    DrawLine 100,50
    Drawline 150,75

au lieu de  :

    Drawline 0,0,50,50
    DrawLine 50,50,100,50
    Drawline 100,50,150,75


SetPixel... utilises SetPixelV, plus rapide
ou manipules les bits de ton DIB :p





signaler à un administrateur
Commentaire de violent_ken le 26/06/2007 09:55:46

Salut,

-"penses a mettre des ByVal de temps à autres" ==> Il est vrai que je n'ai mis aucun Byval (bizarre, d'habitude je le fais ?). Mais est-ce grave (le Byval étant plus long car çà copie en mémoire la variable) puisque je ne manipule pas (je pense) les paramètres directement ?

-"DrawImageToVirtualDC : pas besoin de faire une copie du Bmp" ==> ok !

-"DrawLine...." ==> Ok je note.

-"SetPixel... utilises SetPixelV, plus rapide" ==> Ok, je le ferais ;)

-"ou manipules les bits de ton DIB :p" ==> ahah, lol, je ne maitrise pas suffisement ;)

Merci pour les conseils, @+

signaler à un administrateur
Commentaire de BruNews le 26/06/2007 17:10:01 administrateur CS

ByVal ne crée une copie que pour un tableau.
Si c'est valeur simple c'est au contraire plus rapide pour la fonction recevante, pas de pointeur à déréférencer.

signaler à un administrateur
Commentaire de violent_ken le 26/06/2007 17:18:53

Merci pour cette remarque, je l'ignorais.
@+

signaler à un administrateur
Commentaire de BruNews le 26/06/2007 17:28:43 administrateur CS

Viens vite au natif, seulement avec du vrai code que tu te rendras compte de ces évidences.

signaler à un administrateur
Commentaire de candyraton le 09/12/2008 13:33:35

Bonjour et bravo violent (tu porte bien ton nom je trouve) pour toutes tes excellentes sources.

Avec PCPT, vous êtes à 2 doigt de nous finir le contrôle dont tout le monde rêve:
le richRECTbox!
myrrb.picture
myrrb.line
myrrb.bordure = false
myrrb.left
myrrb.height
myrrb.text (pourquoi pas (tout simple genre printdc))
myrrb.titrebar = true
myrrb.titre = "mon rrb non invisible"
event myrrb_mouvemouss
event myrrb_wheelup    
event myrrb_out
event clavier (pourquoi pas)
event focus (tant qu'à faire)
...
   genre window mais sans les restrictions de windows.
Le contrôle polyvalent que l'on utilise pour tout.
(jusqu'au simple click dans une zone predefinie)

fini les labels, les picturebox et autres contrôles difficilement transportables.

Pourtant, ce contrôle n'est qu'un carré vide.
(vide mais pas creux!)

Et on peut encore lui ajouter 2-3 fonctionnalités genre myrrb.capture ou myrrb.hdlefenetredudessous...

   Vous y avez déja penser n'est pas?

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

SVP, rien que Bitblt en .net , c'est impossible??? [ par Fildomen ] salut.Est-ce-que avec la TECHNOLOGIE .net , on peut même pas utiliser l'api bitblt (Parce-qu'il n y a pas de picture1.hdc). je veux pas utiliser des e BitBlt sous VBA? [ par 3dflix ] Bonjour,je souhaite utiliser l'api BitBlt en vba excel pour copier une partie de mon Image1(imagebox) dans mon Image2(Imagebox).x = BitBlt(Image2.hDC, Utilisé GDI+ sous vb6 [ par schlen ] Bonjour, je cherche un moyen d'utilisé GDI+ sous VB6, j'ai beau chercher, je ne trouve pas! De plus il me faudrai plus particulierement la fonctiont B décodage image bitmap [ par arnovb ] bonjour je cherche un programme en visual basic qui me permettrait de dire si une zone d'une image bitmap est blanche ou pas quelqu'un peut il m'aider bitmap vers texte [ par arnovb ] bon j'ai cherché sur le forum mais je n'ai pas trouvéje voudrai ouvrir un bitmap en mode texte pour aller tester la couleur de certains pixel à l'inté .NET 2.0 : fichier image verrouillé [ par TigerFab ] Bonjour,J'ai un problème lorsque j'utilise system.drawing.bitmap(fichier)par ex :Dim bmp As<font c Shadow en GDI+ [ par peug ] Avé !je cherche à créer une ombre (dégradé+transparence) derrière un rectangle (dessiné via API classic)J'ai trouvé des codes fabuleux (ps : cherchez composant bitmap [ par marouane2010 ] Bonjour,priere de m'indiquer le composant necessaire en visual basic permettant d'utiliser le controle Bitmap, car je veux faire un tratement sur des Bitblt Excel [ par cheyenne ] Bonjour à Tous,Mon problème est le suivant :Sous Excel dans une UserForm j'ai une Image1 représentant diverses icônes. Lorsque je survole l'image le n Diminuer la resolution d'une image (dpi) [ par Syphou ] Bonjour;Jai une fonction qui va chercher 28 000 images d'articles sur le net. Je doit les enregistrer sur un serveur, elles doivent etre carrée et etr


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


HTC Magic

Entre 429€ et 429€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,764 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.