begin process at 2012 05 27 13:54:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Texte

 > BITMAP ET BRUSHES

BITMAP ET BRUSHES


 Information sur la source

Note :
Aucune note
Catégorie :Texte Source .NET ( DotNet ) Niveau :Débutant Date de création :07/11/2003 Date de mise à jour :18/07/2009 02:50:59 Vu / téléchargé :9 118 / 303

Auteur : radada

Ecrire un message privé
Site perso
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Et ben voila. Je suis en train de migrer en .Net et j'ai découvert un truc sensationnel (je sais, il m'en faut peu :D). On peut texturer des formes géométriques avec un bitmap (ça, ça doit exister en VB6), mais on peut texturer du TEXTE avec un bitmap. Je trouve ça génial. Alors j'ai repris mon cours, j'ai amélioré un peu l'exo et je l'ai commenté à fond les ballons pour que vous puissiez vous amuser aussi. J'espère que cela vous plaira, même si c'est un peu gadget :D:D

Source

  • ' on importe les classes de dessins sur texte
  • Imports System.Drawing.Text
  • Public Class Form1
  • Inherits System.Windows.Forms.Form
  • #Region " Code généré par le Concepteur Windows Form "
  • #End Region
  • ' on doit dénifir un objet de type graphic pour pouvoir dessiner et écrire sur la form
  • Dim G As Graphics
  • ' on déclare un bitmap qui recevra le bitmap de texturage
  • Dim bitmap As bitmap
  • ' on déclare une brosse de type TextureBrush
  • Dim brush As TextureBrush
  • Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  • ' on définit un tableau qui prendra les noms des fonts et un objet de type fontfamily pour lister les polices de la bécane
  • Dim FontList As New Collections.ArrayList(10)
  • Dim Fonts As FontFamily
  • ' pour chaque police de l'objet de type "FontFamily", on ajoute le nom dans le tableau de police
  • For Each Fonts In FontFamily.Families
  • FontList.Add(Fonts.Name)
  • Next
  • ' on crée l'objet Graphic déclaré plus haut pour pouvoir l'utiliser
  • G = Me.CreateGraphics
  • ' on relie la source du combobox cbFont à la liste de police récupérée
  • cbFont.DataSource = FontList
  • End Sub
  • Private Sub f_dessine_text()
  • ' Le .net comprends maintenant une gestion des erreurs et des exceptions de même type que les "vrais" langages orientés objets
  • ' il existe donc maintenant une procédure Try .... catch qui essaye de faire tourner une routine contenue dans le bloc "try" (essaie)
  • ' et si une exception se produit, le prog se débranche de la procédure pour aller au bloc "Catch" (attrape)
  • ' dans ce bloc, on définit les instructions à suivre selon la nature de l'évenement associé à Catch
  • Try
  • ' on efface la form à l'aide de l'objet de type "Graphics", par la méthode .Clear(color).
  • ' comme couleur, on prends simplement la couleur de fond de la form me.backcolor
  • G.Clear(Me.BackColor)
  • ' on appelle la méthode de dessin pour les textes DrawString (littéralement Dessine un texte pour les non anglophiles)
  • ' cette méthode prends comme argument (dans l'ordre) :
  • ' 1°) le texte à afficher (ici "TEST")
  • ' 2°) la police à utiliser. Ici, no crée une nouvelle police (new Font()) avec comme argument : le nom de la police
  • ' (contenue dans le combobx, soit cbFont.text), la taille (120) et un type FontStyle. vous remarquerez qu'il existe
  • ' 13 types de méthode Font() avec des signatures différentes
  • ' 3°) la brosse à utiliser (ici notre brosse TextureBrush)
  • ' 4°) le coin supérieur gauche depuis lequel on va dessiner
  • G.DrawString("TEST", New Font(cbFont.Text, 200, FontStyle.Bold), brush, New PointF(40, 20))
  • ' on chope les exceptions (notamment si aucune brush n'est définie, cela génére une erreur, et on ne fais rien :D
  • Catch ex As Exception
  • End Try
  • End Sub
  • Private Sub btLoadBitmap_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btLoadBitmap.Click
  • ' il faut créer un délégué GetThumbNailImageAbort pour pouvoir utiliser les thumbnails (voir MSDN pour plus d'info)
  • Dim delegue As Image.GetThumbnailImageAbort
  • On Error GoTo suite
  • ' Classique, comme dans VB6, sauf que l'objet CommonDialog est décliné en plusieurs entités OpenFileDialog, ColorDialog, etc.
  • OpenFileDialog.Filter = "*.bmp (bitmap) | *.bmp"
  • OpenFileDialog.InitialDirectory = "c:\"
  • OpenFileDialog.Title = "Choisissez le bitmap de texturage"
  • OpenFileDialog.ShowDialog()
  • ' La partie intéressante :D. On charge le bitmap avec la méthode FromFile
  • bitmap = bitmap.FromFile(OpenFileDialog.FileName)
  • ' on écrit simplement dans le Label lblBitmap le chemin du bitmap chargé
  • lblBitmap.Text = OpenFileDialog.FileName
  • ' et on définit le bitmap de texture de la brosse Brush
  • brush = New TextureBrush(bitmap)
  • ' on charge la preview de l'image dans la picturebox
  • PictureBox1.Image = bitmap.GetThumbnailImage(70, 70, delegue, IntPtr.Zero)
  • f_dessine_text()
  • suite:
  • End Sub
  • Private Sub btQuit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btQuit.Click
  • End
  • End Sub
  • Private Sub cbFont_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbFont.SelectedIndexChanged
  • ' on appelle la sub de dessin tout simplement
  • f_dessine_text()
  • End Sub
  • End Class
'   on importe les classes de dessins sur texte
Imports System.Drawing.Text

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Code généré par le Concepteur Windows Form "
#End Region
    '   on doit dénifir un objet de type graphic pour pouvoir dessiner et écrire sur la form
    Dim G As Graphics
    '   on déclare un bitmap qui recevra le bitmap de texturage
    Dim bitmap As bitmap
    '   on déclare une brosse de type TextureBrush
    Dim brush As TextureBrush

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' on définit un tableau qui prendra les noms des fonts et un objet de type fontfamily pour lister les polices de la bécane
        Dim FontList As New Collections.ArrayList(10)
        Dim Fonts As FontFamily
        '   pour chaque police de l'objet de type "FontFamily", on ajoute le nom dans le tableau de police
        For Each Fonts In FontFamily.Families
            FontList.Add(Fonts.Name)
        Next

        ' on crée l'objet Graphic déclaré plus haut pour pouvoir l'utiliser
        G = Me.CreateGraphics
        ' on relie la source du combobox cbFont à la liste de police récupérée
        cbFont.DataSource = FontList
    End Sub

    Private Sub f_dessine_text()
        '   Le .net comprends maintenant une gestion des erreurs et des exceptions de même type que les "vrais" langages orientés objets
        '   il existe donc maintenant une procédure Try .... catch qui essaye de faire tourner une routine contenue dans le bloc "try" (essaie)
        '   et si une exception se produit, le prog se débranche de la procédure pour aller au bloc "Catch" (attrape)
        '   dans ce bloc, on définit les instructions à suivre selon la nature de l'évenement associé à Catch
        Try
            '   on efface la form à l'aide de l'objet de type "Graphics", par la méthode .Clear(color).
            '   comme couleur, on prends simplement la couleur de fond de la form me.backcolor
            G.Clear(Me.BackColor)
            '   on appelle la méthode de dessin pour les textes DrawString (littéralement Dessine un texte pour les non anglophiles)
            '   cette méthode prends comme argument (dans l'ordre) : 
            '       1°) le texte à afficher (ici "TEST")
            '       2°) la police à utiliser. Ici, no crée une nouvelle police (new Font()) avec comme argument : le nom de la police
            '           (contenue dans le combobx, soit cbFont.text), la taille (120) et un type FontStyle. vous remarquerez qu'il existe
            '           13 types de méthode Font() avec des signatures différentes
            '       3°) la brosse à utiliser (ici notre brosse TextureBrush)
            '       4°) le coin supérieur gauche depuis lequel on va dessiner
            G.DrawString("TEST", New Font(cbFont.Text, 200, FontStyle.Bold), brush, New PointF(40, 20))
            '   on chope les exceptions (notamment si aucune brush n'est définie, cela génére une erreur, et on ne fais rien :D
        Catch ex As Exception
        End Try

    End Sub

    Private Sub btLoadBitmap_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btLoadBitmap.Click
        '   il faut créer un délégué GetThumbNailImageAbort pour pouvoir utiliser les thumbnails (voir MSDN pour plus d'info)
        Dim delegue As Image.GetThumbnailImageAbort
        On Error GoTo suite
        '   Classique, comme dans VB6, sauf que l'objet CommonDialog est décliné en plusieurs entités OpenFileDialog, ColorDialog, etc.
        OpenFileDialog.Filter = "*.bmp (bitmap) | *.bmp"
        OpenFileDialog.InitialDirectory = "c:\"
        OpenFileDialog.Title = "Choisissez le bitmap de texturage"
        OpenFileDialog.ShowDialog()

        '   La partie intéressante :D. On charge le bitmap avec la méthode FromFile
        bitmap = bitmap.FromFile(OpenFileDialog.FileName)
        '   on écrit simplement dans le Label lblBitmap le chemin du bitmap chargé
        lblBitmap.Text = OpenFileDialog.FileName
        '   et on définit le bitmap de texture de la brosse Brush
        brush = New TextureBrush(bitmap)
        '   on charge la preview de l'image dans la picturebox
        PictureBox1.Image = bitmap.GetThumbnailImage(70, 70, delegue, IntPtr.Zero)
        f_dessine_text()
suite:
    End Sub

    Private Sub btQuit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btQuit.Click
        End
    End Sub

    Private Sub cbFont_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbFont.SelectedIndexChanged
        '   on appelle la sub de dessin tout simplement
        f_dessine_text()
    End Sub
End Class

 Conclusion

Voila, ça vous a plu???? ; ))

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip UTILISATION DES TYPE ET DES FICHIERS EN RANDOM
Source avec Zip Source avec une capture "MARRE DE TAPER DU TEXTE???" SUITE ET PRESQUE FIN (ESC)
Source avec Zip Source avec une capture MARRE DE TAPER DU TEXTE??? CRÉEZ DES RACCOURCIS DE TEXTE : )...
Source avec Zip Source avec une capture ESC, GESTION DE RACCOURCIS __ MIS A JOUR

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) FABRIQUEUR DE STATUTS/MESSAGES SPÉCIAUX par pablo836
Source avec Zip Source avec une capture MASQUE DE SAISIE NUMÉRIQUE par acive
Source avec Zip Source .NET (Dotnet) COMPTEUR DE NOMBRE DE MOTS DANS UN TEXTE par alpha5
Source avec Zip Source avec une capture HM - BLOCNOTE par hassenmajor
Source .NET (Dotnet) [VB.NET] CLASS DE COLORATION SYNTAXIQUE "ON THE FLY" par huzima

Commentaires et avis

Commentaire de Renfield le 07/11/2003 14:25:20 administrateur CS

lol.

C'est tout a fait faisable en VB6 ausi, je te rassures....

Commentaire de radada le 07/11/2003 14:32:51

ah merde!!!! lol, merci Renfield ; ))

Commentaire de Renfield le 07/11/2003 15:03:18 administrateur CS

en tout cas, c'est sympa, et très commenté.....


as réaliser en VB6, c'est possible, mais plus long, je te le ferai, si tu veux ;-)

Commentaire de radada le 07/11/2003 15:25:58

ouais, je veux bien que tu m'envoie cette source en VB 6 un de ces 4 quand tu aura le temps!!!! Décidemment, je crois qu'il faut que j'aille hiberner loooooooool :D:D:D. Merci encore Renfield ; )

Commentaire de EBArtSoft le 07/11/2003 16:58:46 administrateur CS

FORMIDABLE... lol

niarf ;-P

Je pense tres cher Renfield que ça
donne qlq chose comme ce qui suit :

Private Sub Command1_Click()
    Dim x&, y&, i&, j&, t$
    Cls
    t = "EBArtSoft@"
    x = Picture1.Width
    y = Picture1.Height
    BeginPath Me.hdc
    TextOut Me.hdc, 0, 0, t, Len(t)
    EndPath Me.hdc
    SelectClipPath Me.hdc, RGN_COPY
    For i = 0 To Me.TextWidth(t) Step x
        For j = 0 To Me.TextHeight(t) Step y
            BitBlt Me.hdc, i * x, j * y, x, y, Picture1.hdc, 0, 0, vbSrcCopy
        Next
    Next
End Sub

Merci VB6 ... (de rien répond t-il !)

@+

Commentaire de Renfield le 07/11/2003 17:38:14 administrateur CS

C'est une solution aussi..... je ne comptait pas faire comme ca.....

Commentaire de Renfield le 08/11/2003 00:52:29 administrateur CS

'#A Placer dans un module.... (facultatif !)

Private Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function PatBlt Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As SIZE) As Long

Private Type SIZE
    cw As Long
    ch As Long
End Type

Private Const PATINVERT = &H5A0049

Public Function DCTextWidth(hdc As Long, Str As String) As Long
    Dim SIZE As SIZE
    GetTextExtentPoint32 hdc, Str, Len(Str), SIZE
    DCTextWidth = SIZE.cw
End Function

Public Function DCTextHeight(hdc As Long, Str As String) As Long
    Dim SIZE As SIZE
    GetTextExtentPoint32 hdc, Str, Len(Str), SIZE
    DCTextHeight = SIZE.ch
End Function

Public Function DrawBrushedText(ByVal hdc As Long, ByVal X As Single, ByVal Y As Single, ByVal Str As String, ByVal hBrush As Long) As Boolean
    Dim oldBrush As Long
    oldBrush = SelectObject(hdc, hBrush)
    
    Dim Width As Long: Width = DCTextWidth(hdc, Str)
    Dim Height As Long: Height = DCTextHeight(hdc, Str)
    
    PatBlt hdc, X, Y, Width, Height, PATINVERT
    TextOut hdc, X, Y, Str, Len(Str)
    DrawBrushedText = PatBlt(hdc, X, Y, Width, Height, PATINVERT)
    
    SelectObject hdc, oldBrush
End Function


'# A Placer dans une Form possedant une pictureBox "Picture1", avec une image !!!
Private Sub Form_Load()
    Dim hBrush As Long
    hBrush = CreatePatternBrush(Picture1.Image)
    
    Me.FontName = "Arial"
    Me.FontSize = 72
    Me.AutoRedraw = True
    Me.Width = 8500
    Me.Height = 3000
    
    DrawBrushedText Me.hdc, 30, 30, "By Renfield", hBrush
    DeleteObject hBrush
End Sub

Commentaire de Renfield le 08/11/2003 01:43:49 administrateur CS

j'ai posté un pseudo portage de ta source :

http://www.vbfrance.com/code.aspx?ID=17777


j'espere que ca te conviendra....

Commentaire de radada le 13/11/2003 17:12:18

Merci Renfield, t un killer comme d'hab ; ))

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales