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 :

Comment utiliser SETPIXEL ? [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Homme Profil pro
    Auteur logiciels et romans
    Inscrit en
    Février 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auteur logiciels et romans
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2009
    Messages : 203
    Par défaut Comment utiliser SETPIXEL ?
    Bonjour,

    J'ai un petit problème avec l'utilisation de SetPixel, il doit manquer quelque chose dans mon code... J'ai fait plein d'essais avant de tout enlever, sans résultat...

    J'ai 3 picturenox 1, 2 et 3 : identiques de 100*100
    Mon intention et de copier alternativement dans les picture 1 et 2, l'une les pixels pairs, l'autre les pixels impairs, et d'écrire dans la picture3 le résultat, ce qui est censé faire une fusion de deux image source dans la troisième image cible (les pictures sources ont déjà une image)

    Voici mon pauve code :

    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
     
    Option Explicit On
    Public Class Form1
     
    Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i1 As Bitmap = PictureBox1.Image ' identique 1,2,3 = 100*100
        Dim i2 As Bitmap = PictureBox2.Image
        Dim c As Color
        Dim x, y As Integer
        Dim alternat As Boolean = False
        For x = 0 To (i1.Width - 1)
          For y = 0 To (i1.Height - 1)
            alternat = Not alternat
            Select Case alternat
              Case True : c = i1.GetPixel(x, y)
              Case False : c = i2.GetPixel(x, y)
            End Select
            PictureBox3.Image = SetPixel(x, y, c) ' ERREUR !
          Next
        Next
      End Sub
     
    End Class
    En vous remerciant.
    .

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    (j'espère que c'est une erreur de compilation)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    dim i1 (...)
    dim i2 (...)
    dim i3 as new bitmap(PictureBox1.width, PictureBox1.height, [32b argb (ou trouvé sur i1])
    (...)
    i3.setpixel(x,y,c)
     
    ' à la fin et hors boucle :
    PictureBox3.Image = i3

    getpixel/setpixel sont très lents, sur du 100x100 ca devrait aller, si tu veux plus de perfs il faudra passer par la récupération des octets puis travailler sur eux (lockbits, marshalling etc...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Inactif
    Homme Profil pro
    Auteur logiciels et romans
    Inscrit en
    Février 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auteur logiciels et romans
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2009
    Messages : 203
    Par défaut Réponse au Cerf
    Citation Envoyé par Pol63 Voir le message
    (j'espère que c'est une erreur de compilation)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dim i1 (...)
    dim i2 (...)
    dim i3 as new bitmap(PictureBox1.width, PictureBox1.height, [32b argb (ou trouvé sur i1])
    (...)
    i3.setpixel(x,y,c)
    ' à la fin et hors boucle :
    PictureBox3.Image = i3
    getpixel/setpixel sont très lents, sur du 100x100 ca devrait aller, si tu veux plus de perfs il faudra passer par la récupération des octets puis travailler sur eux (lockbits, marshalling etc...)


    Bonjour le Cerf,

    Ah, une fois n'est pas coutume, je te remercie.

    Le argv
    , [32b argb (ou trouvé sur i1])
    je l'ai enlevé, il ne sert pas, d'autant que je ne comprends pas comment tu veux passer des paramètres de couleur avant de connaitre la couleur dans la boucle, sauf si ça le formate pour les recevoir, je ne m'y connais pas énormément dans ce type de code que j'utilie peu...

    Oui c'est long les pixels, enfin avec vb6...
    Là, vbNet pour une fois il fait mieux, tout compris je trouve 47 millièmes de seconde, à l'oeil 1/3 de seconde, ça va

    J'ai regardé l'écran à la loupe (on voit bien le quadrillage des pixels), c'est exactement ce que je voulais 1/2, encore 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
     
    Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim tempsPC1 As Long = My.Computer.Clock.TickCount
        Dim i1 As Bitmap = PictureBox1.Image ' identique 1,2,3 = 100*100
        Dim i2 As Bitmap = PictureBox2.Image
        Dim i3 As New Bitmap(PictureBox1.Width, PictureBox1.Height)
        Dim c As Color
        Dim x, y As Integer
        Dim alternat As Boolean = False
        For x = 0 To (i1.Width - 1)
          For y = 0 To (i1.Height - 1)
            alternat = Not alternat
            Select Case alternat
              Case True : c = i1.GetPixel(x, y)
              Case False : c = i2.GetPixel(x, y)
            End Select
            i3.SetPixel(x, y, c)
          Next
        Next
        PictureBox3.Image = i3
        Dim tempsPC2 As Long = My.Computer.Clock.TickCount
        MsgBox(tempsPC2 - tempsPC1) ' 47 millièmes/s
      End Sub

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    le argb dans le constructeur de bitmap c'est le format de couleur
    c'est à dire le nombre d'octets par pixel pour coder la couleur, et le type de codage
    32bppargb (qui doit etre la valeur par défaut) veut dire 4 octets par pixel, un pour le canal alpha (transparence) puis l'rgb classique (red green blue entre 0 et 255)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  2. Comment utiliser un cache ?
    Par TOM-Z dans le forum XMLRAD
    Réponses: 4
    Dernier message: 14/03/2003, 09h55
  3. comment utiliser actionscript ?
    Par webs dans le forum Flash
    Réponses: 3
    Dernier message: 09/02/2003, 23h11
  4. Comment utiliser OUT ?
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 20/07/2002, 09h35
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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