IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Programme lent et demande de conseils


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 6
    Points
    6
    Par défaut Programme lent et demande de conseils
    bonjour,

    je suis novice dans la programmation mais je suis fan!

    pour évoluer dans ma programmation, j’essaie de générer un monde aléatoire du style "terraria"

    j'ai fais des premières lignes mais le programme et lent au démarrage comme pour utiliser les scrollbarres

    voici mon début. mais je pense que je mis prends mal.

    De plus, je voudrai créer des "tunnels" aléatoire débouchant ou non. comment faire?

    un peu d'aide svp

    cordialement Rémi


    voici le code, suivi d'un lien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    Public Class Form1
     
     
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            f = 50 'nombre de casse
            d = 50 'size
            'dimension aléatoire du cadre
     
            'dimcadre()
            'encadrement
            'monde premier étage
            depart()
     
        End Sub
     
        Sub depart()
            Dim tab(100000) As PictureBox
            Dim i, s, j As Integer
            b = 500 'top
            a = 0 'left
     
     
            For i = 1 To f
     
     
                Randomize()
                c = Int((20 * Rnd()) + 1)
     
                'premier
                If i = 1 Then
                    tab(i) = New PictureBox()
                    tab(i).Size = New Size(d, d)
                    tab(i).Visible = True
                    tab(i).Left = a
                    tab(i).Top = b
                    tab(i).ImageLocation = "c:\users\rémi\documents\visual studio 2013\Projects\WindowsApplication7\WindowsApplication7\Resources\rouge.png"
                    tab(i).Name = "PictureBox" & i
                    Me.Controls.Add(tab(i))
                    s = b
     
     
                    For j = 1 To 50
                        tab(i) = New PictureBox()
                        tab(i).Size = New Size(d, d)
                        tab(i).Visible = True
                        tab(i).Left = a
                        tab(i).Top = s
                        s = s + 50
     
     
                        tab(i).ImageLocation = "c:\users\rémi\documents\visual studio 2013\Projects\WindowsApplication7\WindowsApplication7\Resources\rouge.png"
                        tab(i).Name = "PictureBox" & i
                        Me.Controls.Add(tab(i))
                    Next
     
     
     
                    'remplir le dessous
     
                End If
     
     
                'dessus
                If c = 1 Then
                    tab(i) = New PictureBox()
                    tab(i).Size = New Size(d, d)
                    tab(i).Visible = True
                    b = b - d
                    tab(i).Left = a
                    tab(i).Top = b
                    tab(i).ImageLocation = "c:\users\rémi\documents\visual studio 2013\Projects\WindowsApplication7\WindowsApplication7\Resources\rouge.png"
                    tab(i).Name = "PictureBox" & i
                    'Me.Controls.Add(tab(i))
     
                End If
     
                'dessus devant
                If c = 2 Then
                    tab(i) = New PictureBox()
                    tab(i).Size = New Size(d, d)
                    tab(i).Visible = True
                    a = a + d
                    b = b - d
                    tab(i).Left = a
                    tab(i).Top = b
                    tab(i).ImageLocation = "c:\users\rémi\documents\visual studio 2013\Projects\WindowsApplication7\WindowsApplication7\Resources\rouge.png"
                    tab(i).Name = "PictureBox" & i
                    'Me.Controls.Add(tab(i))
                    s = b
     
     
                    For j = 1 To 50
                        tab(i) = New PictureBox()
                        tab(i).Size = New Size(d, d)
                        tab(i).Visible = True
                        tab(i).Left = a
                        tab(i).Top = s
                        s = s + 50
                        tab(i).ImageLocation = "c:\users\rémi\documents\visual studio 2013\Projects\WindowsApplication7\WindowsApplication7\Resources\rouge.png"
                        tab(i).Name = "PictureBox" & i
                        Me.Controls.Add(tab(i))
                    Next
                End If
     
                'devant
                If c > 2 And c < 19 Then
                    tab(i) = New PictureBox()
                    tab(i).Size = New Size(d, d)
                    tab(i).Visible = True
                    a = a + d
                    tab(i).Left = a
                    tab(i).Top = b
                    tab(i).ImageLocation = "c:\users\rémi\documents\visual studio 2013\Projects\WindowsApplication7\WindowsApplication7\Resources\rouge.png"
                    tab(i).Name = "PictureBox" & i
                    'Me.Controls.Add(tab(i))
                    s = b
     
     
                    For j = 1 To 50
                        tab(i) = New PictureBox()
                        tab(i).Size = New Size(d, d)
                        tab(i).Visible = True
                        tab(i).Left = a
                        tab(i).Top = s
                        s = s + 50
                        tab(i).ImageLocation = "c:\users\rémi\documents\visual studio 2013\Projects\WindowsApplication7\WindowsApplication7\Resources\rouge.png"
                        tab(i).Name = "PictureBox" & i
                        Me.Controls.Add(tab(i))
                    Next
                End If
     
                'devant dessous
                If c = 19 Then
                    tab(i) = New PictureBox()
                    tab(i).Size = New Size(d, d)
                    tab(i).Visible = True
                    a = a + d
                    b = b + d
                    tab(i).Left = a
                    tab(i).Top = b
                    tab(i).ImageLocation = "c:\users\rémi\documents\visual studio 2013\Projects\WindowsApplication7\WindowsApplication7\Resources\rouge.png"
                    tab(i).Name = "PictureBox" & i
                    'Me.Controls.Add(tab(i))
                    s = b
     
     
                    For j = 1 To 50
                        tab(i) = New PictureBox()
                        tab(i).Size = New Size(d, d)
                        tab(i).Visible = True
                        tab(i).Left = a
                        tab(i).Top = s
                        s = s + 50
                        tab(i).ImageLocation = "c:\users\rémi\documents\visual studio 2013\Projects\WindowsApplication7\WindowsApplication7\Resources\rouge.png"
                        tab(i).Name = "PictureBox" & i
                        Me.Controls.Add(tab(i))
                    Next
                End If
     
                'dessous
                If c = 20 Then
                    tab(i) = New PictureBox()
                    tab(i).Size = New Size(d, d)
                    tab(i).Visible = True
                    b = b + d
                    tab(i).Left = a
                    tab(i).Top = b
                    tab(i).ImageLocation = "c:\users\rémi\documents\visual studio 2013\Projects\WindowsApplication7\WindowsApplication7\Resources\rouge.png"
                    tab(i).Name = "PictureBox" & i
     
     
                End If
                tab(i).ImageLocation = "c:\users\rémi\documents\visual studio 2013\Projects\WindowsApplication7\WindowsApplication7\Resources\rouge.png"
                tab(i).Name = "PictureBox" & i
                Me.Controls.Add(tab(i))
            Next i
     
            'boucle de remplissage
     
     
        End Sub
     
    End Class
    https://drive.google.com/file/d/0B5u...it?usp=sharing

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour.

    En deux mots :
    * Ici tu indiques au programme des chemins d'accès, donc il va toujours chercher à lire depuis le disque dur, ce qui est très lent. Sans parler de l'étape de décodage à chaque fois. Charge une fois toutes des objets Bitmap en mémoire, puis assigne des bitmaps plutôt que des chemins d'accès à tes PictureBox.

    * Ce ne sera jamais rapide, ne te fais pas d'illusion : WinForms est conçu pour créer des UI, or une UI change rarement et on a besoin de fonctionnalités avancées. Ce n'est pas un moteur de jeu où on chercherait à regrouper les appels vers la carte graphique en exposant des fonctionnalités limitées. Donc ne t'attend pas à des miracles, WinForms n'est pas fait pour ça.

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    on peut faire des miracles avec windows forms, mais ce n'est pas aussi simple que d'ajouter des picturebox
    nous on a bien des centaines de controles qui clignotent et/ou changent de couleur toutes les 500 ms

    tu peux aussi mettre me.suspendlayout au début de la sub et .resumelayout à la fin
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    on peut faire des miracles avec windows forms, mais ce n'est pas aussi simple que d'ajouter des picturebox
    nous on a bien des centaines de controles qui clignotent et/ou changent de couleur toutes les 500 ms
    Mais pour faire du scrolling il faut mettre à jour 1920*1080*60 pixels par seconde. Soit, avec des tiles de 16*16 pixels 500k tiles par seconde. Donc mille fois plus que dans votre cas.

    C'est peut être possible mais ça ramera à mort avec certains pilotes de carte graphique qui ne sont plus guère optimisés pour GDI. A la rigueur créer un bitmap à la main serait peut-être un meilleur pari !

  5. #5
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Don quiche a parfaitement raison
    Le defaut de ton code :il "rame" lamentablement a cause du chargement de ton unique image "rouge.png"
    ca c'est le 1er defaut cher Remy ...
    change le comme suit svp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
     
    Public Class frmSprite1
     
        Private f, d As Integer
        '------------------LE SIMPLE BITMAP SPRITE------------------
        Private Sprite As Bitmap
        Private tab(100000) As PictureBox
     
        Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            '------------------UTILISE CECI POUR EVITER LE SCINTILLEMENT----------
            Me.DoubleBuffered = True
        End Sub
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
            f = 50 'nombre de casse
            d = 50 'size
            '------------------INIT TON SPRITE BITMAP ICI PUISQUE C'EST TOUJOURS ROUGE.PNG
            Sprite = New Bitmap(Image.FromFile(Application.StartupPath + "\Resources\rouge.png"), d, d)
     
            'dimension aléatoire du cadre
     
            'dimcadre()
            'encadrement
            'monde premier étage
            '------------------ENCADRE  TON SUB "depart" PAR CECI ------------------
            Me.SuspendLayout()
            depart()
            Me.ResumeLayout()
     
        End Sub
        Private a, b, c As Integer
        Sub depart()
     
            Dim i, s, j As Integer
            b = 500 'top
            a = 0 'left
     
     
            For i = 1 To f
     
     
                Randomize()
                c = Int((20 * Rnd()) + 1)
     
                'premier
                If i = 1 Then
                    tab(i) = New PictureBox()
                    tab(i).Size = New Size(d, d)
                    tab(i).Visible = True
                    tab(i).Left = a
                    tab(i).Top = b
                    tab(i).Image = Sprite
                    tab(i).Name = "PictureBox" & i
                    Me.Controls.Add(tab(i))
                    s = b
     
     
                    For j = 1 To 50
                        tab(i) = New PictureBox()
                        tab(i).Size = New Size(d, d)
                        tab(i).Visible = True
                        tab(i).Left = a
                        tab(i).Top = s
                        s = s + 50
     
     
                        tab(i).Image = Sprite
                        tab(i).Name = "PictureBox" & i
                        Me.Controls.Add(tab(i))
                    Next
     
     
     
                    'remplir le dessous
     
                End If
     
     
                'dessus
                If c = 1 Then
                    tab(i) = New PictureBox()
                    tab(i).Size = New Size(d, d)
                    tab(i).Visible = True
                    b = b - d
                    tab(i).Left = a
                    tab(i).Top = b
                    tab(i).Image = Sprite
                    tab(i).Name = "PictureBox" & i
                    'Me.Controls.Add(tab(i))
     
                End If
     
                'dessus devant
                If c = 2 Then
                    tab(i) = New PictureBox()
                    tab(i).Size = New Size(d, d)
                    tab(i).Visible = True
                    a = a + d
                    b = b - d
                    tab(i).Left = a
                    tab(i).Top = b
                    tab(i).Image = Sprite
                    tab(i).Name = "PictureBox" & i
                    'Me.Controls.Add(tab(i))
                    s = b
     
     
                    For j = 1 To 50
                        tab(i) = New PictureBox()
                        tab(i).Size = New Size(d, d)
                        tab(i).Visible = True
                        tab(i).Left = a
                        tab(i).Top = s
                        s = s + 50
                        tab(i).Image = Sprite
                        tab(i).Name = "PictureBox" & i
                        Me.Controls.Add(tab(i))
                    Next
                End If
     
                'devant
                If c > 2 And c < 19 Then
                    tab(i) = New PictureBox()
                    tab(i).Size = New Size(d, d)
                    tab(i).Visible = True
                    a = a + d
                    tab(i).Left = a
                    tab(i).Top = b
                    tab(i).Image = Sprite
                    tab(i).Name = "PictureBox" & i
                    'Me.Controls.Add(tab(i))
                    s = b
     
     
                    For j = 1 To 50
                        tab(i) = New PictureBox()
                        tab(i).Size = New Size(d, d)
                        tab(i).Visible = True
                        tab(i).Left = a
                        tab(i).Top = s
                        s = s + 50
                        tab(i).Image = Sprite
                        tab(i).Name = "PictureBox" & i
                        Me.Controls.Add(tab(i))
                    Next
                End If
     
                'devant dessous
                If c = 19 Then
                    tab(i) = New PictureBox()
                    tab(i).Size = New Size(d, d)
                    tab(i).Visible = True
                    a = a + d
                    b = b + d
                    tab(i).Left = a
                    tab(i).Top = b
                    tab(i).Image = Sprite
                    tab(i).Name = "PictureBox" & i
                    'Me.Controls.Add(tab(i))
                    s = b
     
     
                    For j = 1 To 50
                        tab(i) = New PictureBox()
                        tab(i).Size = New Size(d, d)
                        tab(i).Visible = True
                        tab(i).Left = a
                        tab(i).Top = s
                        s = s + 50
                        tab(i).Image = Sprite
                        tab(i).Name = "PictureBox" & i
                        Me.Controls.Add(tab(i))
                    Next
                End If
     
                'dessous
                If c = 20 Then
                    tab(i) = New PictureBox()
                    tab(i).Size = New Size(d, d)
                    tab(i).Visible = True
                    b = b + d
                    tab(i).Left = a
                    tab(i).Top = b
                    tab(i).Image = Sprite
                    tab(i).Name = "PictureBox" & i
     
     
                End If
                tab(i).Image = Sprite
                tab(i).Name = "PictureBox" & i
     
            Next i
     
            'boucle de remplissage
     
     
        End Sub
     
     
     
     
     
     
    End Class
    Ce jeu de "terraria" etant un jeu de sprites donc à base de bitmap et de ce qu'on appele des "tiles" ou tuiles pour faire un decor :wall (mur),tree(arbre)...
    Il faudra que tu t'adresses au forum XNA ou on utilise des SpriteBatche ...et des textures animees pour faire l'effet de tunnel animee...

    bon code....

  6. #6
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    N'est-ce pas plus rapide d'utiliser l'instruction My.resources.rouge plutôt que d'indiquer un path (absolu ou relatif) ?
    bien sûr, pour cela, il faut ajouter le fichier rouge.png aux resources du projet en allant dans les propriétés du projet, onglet ressources. Le fait d'avoir gentiment déposé le fichier dans /resources/ ne suffit pas.

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par noftal Voir le message
    N'est-ce pas plus rapide d'utiliser l'instruction My.resources.rouge plutôt que d'indiquer un path (absolu ou relatif) ?
    si

    lire le fichier à chaque fois prend du temps, mettre un fichier image en ressource le transforme en system.Drawing.image
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 6
    Points
    6
    Par défaut changement de direction
    Devant de nombreux conseils,
    J'ai finalement changé de méthode en écrivant dessinant directement dans le formulaire

    mon problème c'est qu'il s'efface quand je bouge la fenêtre

    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Public Class Form1
        Dim g As System.Drawing.Graphics
        Protected Property ResizeRedraw As OverflowAction
     
     
        Private Sub Form1_initialize(sender As Object, e As EventArgs) Handles MyBase.Load
     
            g = Me.CreateGraphics
     
     
     
        End Sub
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim x, y, i, c As Integer
            For i = 1 To 1
     
                x = 0
                y = 0
     
                g.FillRectangle(Brushes.Red, New Rectangle(New Point(x, y), New Size(2000, 2000)))
                x = x + 5
                If x = 100 Then
                    x = 0
                    y = y + 5
                End If
     
     
            Next i
     
        End Sub
    End Class

  9. #9
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Je ne suis pas sûr de moi, mais je pense qu'il faut mettre ton code dans la procédure évenementielle Paint et non Load pour que ton truc se redessine à chaque fois que tu modifies ta fenêtre.

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    en effet
    en windows forms, les controles se redessinent de temps en temps totalement
    si on veut leur rajouter du dessin par dessus il faut le faire dans l'event paint, appelé au moment du dessin de base, ce qui permet donc la persistence
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 6
    Points
    6
    Par défaut mettre des images en boucle dans un picturebox
    bonjour, j'ai pas mal avancé depuis la dernière fois, Et aujourd'hui je me prends un nouveau mur..

    je cherche à afficher plusieurs image dans un picturebox.
    je pense que pour vous ça dois être facile.
    voici ce que je veux faire (pour info, j'ai pas mal regardé sur internet.)

    créer un picturebox

    puis:
    créer une boucle.
    mettre une image.
    positionner l'image.
    nommer cette image.
    fin de boucle

    (et le tout sans que l'image précédente ne s'efface.)

    enfin sauvegarde toute l'image de la picturebox.

    ps: je ne comprends pas l'histoire de surcharge de bitmap.
    en tout cas je ne sais pas l'utiliser.

    merci infiniment.

  12. #12
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Et qu'est-ce qui ne fonctionne pas ?
    Je ne comprends pas bien : un picturebox = une image il me semble.
    Tu ne peux pas afficher plusieurs images dans un même picturebox.
    Donc ta boucle consistera à remplacer une image par la suivante.

  13. #13
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il faudrait connaitre la finalité exacte, si c'est de créer une image avec plusieurs, un controle n'est pas utile, un controle servant à afficher quelque chose à l'écran

    dans tous les cas je te conseille de t'orienter vers le drawing et les graphics
    c'est ce qui permet de dessiner sur une surface (visible ou non)
    tu peux donc superposer ou mettre plusieurs images sur une même surface

    à partir d'un bitmap :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim b as new bitmap(width, height)
    using g as graphics = graphics.fromimage(b)
      ' boucle
            g.drawimage(...
      ' fin boucle
    end using
    après b.save ou unpicturebox.image = b

    sinon sur l'event paint d'un controle on a e.Graphics qui permet de dessiner
    et éventuellement le bufferedgraphics qui permet de gagner un peu de temps quand on dessine souvent la même chose

    si tu instancies beaucoup de bitmap, penses à appeler Dispose dessus quand ils ne sont plus utiles, ca sert à libérer la mémoire (tout comme using/end using dans mon exemple)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 6
    Points
    6
    Par défaut voila un truc qui ne marche pas
    est ce que j'utilise bien les fonctions?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Public Class Form1
     
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim b As New Bitmap(Width, Height)
     
            Using g As Graphics = Graphics.FromImage(b)
     
                For i = 1 To 4
                    Dim x, y As Integer
                    Dim ulcorner As New Point(x, y)
                    x = x + 25
                    Dim newImage As Image = Image.FromFile("c:\users\rémi\documents\visual studio 2013\Projects\WindowsApplication6\WindowsApplication6\Resources\terre1.bmp")
                    g.DrawImage(newImage, ulcorner)
                Next
     
            End Using
        End Sub
    End Class

  15. #15
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il faudrait lire un cours sur vb peut etre avant de coder, enfin avant de faire des copier coller
    http://plasserre.developpez.com/cours/vb-net/

    ici on donne rarement du code à copier coller, mais des pistes, donc merci de réfléchir un peu, et de comprendre le code avant de l'adapter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim b As New Bitmap(width, height)
    ici c'est pour donner la surcharge à utiliser, width et height sont à remplacer par ce qu'il te faut
    par chance dans ton contexte il accepte que tu écrives ca, car width et height renvoie aux dimensions du form
    après pas de chance, je pense que sur le load ils valent 0

    après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim newImage As Image = Image.FromFile("c:\users\rémi\documents\visual studio 2013\Projects\WindowsApplication6\WindowsApplication6\Resources\terre1.bmp")
    il n'y a rien de variable là dedans, et pourtant tu vas le faire 4x donc il faut le sortir de la boucle, sans la compréhension de ce que tu codes tu auras toujours des problèmes de performance ...
    au passage ce chemin ce n'est pas une bonne idée, le jour où tu vas essayer l'appli sur un autre pc l'appli va planter en te disant que le chemin n'existe pas ; on t'a suggéré plus tôt d'utiliser my.resource

    et pour finir tu as dans la variable b une image composée de 4x une image collée en largeur, mais tu ne la mets nulle part, donc normal aussi que ne vois rien ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 6
    Points
    6
    Par défaut ...
    Dim b As New Bitmap(width, height)
    bon bha là pas d'excuse je n'ai pas fait attention.

    sinon pour la boucle je suis au courant qu'elle va faire 4X
    et qu'elle va faire apparaitre cette même image 4X

    et pour moi je comprenais le prefixe new comme une nouvelle image.
    pour information, je lis des pages et des pages depuis quelques semaines...
    donc oui je ne comprends pas tout mais je comprends en faisant et c'est ma façon d'apprendre.

    "faire du copier coller"

    De plus, je demande à ceux qui veulent bien me montrer de le faire, je n'oblige personne et je trouve dommage qu'il y ait toujours un pour rabaisser l'autre.

  17. #17
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par remi4227 Voir le message
    et pour moi je comprenais le prefixe new comme une nouvelle image.
    oui mais c'est le même chemin, donc la même image, donc ca ne sert à rien de lire le fichier 4x


    Citation Envoyé par remi4227 Voir le message
    De plus, je demande à ceux qui veulent bien me montrer de le faire, je n'oblige personne et je trouve dommage qu'il y ait toujours un pour rabaisser l'autre.
    on est bien là tout de même
    c'est juste pour faire le tri entre ceux qui n'ont rien à faire là et ceux qui y mettent du leur, si vous lisez des cours alors vous progresserez (enfin il y a d'autres prérequis)
    et ne se sent rabaissé que celui qui attache de l'importance à ce pense l'autre (un inconnu avec une tête de chèvre en plus ^^)
    si ca peut te rassurer il y a quelques années je me faisais "rabaisser" ici même
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 6
    Points
    6
    Par défaut boucle
    ma boucle ne sert qu'à essayer de faire apparaitre 4 fois la même image en la décalant de 25 pixels par tour. c'est juste pour tester.

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 6
    Points
    6
    Par défaut bref...
    bon bha je n'y arrive pas alors quelqu'un peut me faire un exemple pour que je puisse comprendre. je ne demande pas un truc compliqué juste un truc avec le strict minimum.

    merci

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 6
    Points
    6
    Par défaut svp
    alors? personne ne veut m'aider. je fais internet de long en large et je ne trouve rien... Personne n'a un tuto?

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/05/2014, 14h54
  2. Demande de conseil pour un morceau de programme
    Par brunpac dans le forum Automation
    Réponses: 6
    Dernier message: 03/01/2011, 16h35
  3. Réponses: 16
    Dernier message: 15/11/2005, 20h07
  4. [sqlbaseserver]demande de conseils/aides pour requêtes
    Par GéniuS77 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 18/03/2004, 17h27
  5. demande de conseil
    Par stephane eyskens dans le forum EDI/Outils
    Réponses: 2
    Dernier message: 25/09/2003, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo