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 6 et antérieur Discussion :

modifier une image


Sujet :

VB 6 et antérieur

  1. #1
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 218
    Points
    1 218
    Par défaut modifier une image
    bonjour


    je voulais savoir s'il était possible de modifier une image et particulierement de la découper sous VB.


    merci

    salut

  2. #2
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Pour decouper une image comme tu dis il faut ouvrir le fichier et faire une fonction capable de le lire. Il te faut donc savoir comment sont enregistrés les fichiers bitmap. Le fonctionnement et assez simple.

  3. #3
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 218
    Points
    1 218
    Par défaut
    Citation Envoyé par avigeilpro
    Pour decouper une image comme tu dis il faut ouvrir le fichier et faire une fonction capable de le lire. Il te faut donc savoir comment sont enregistrés les fichiers bitmap. Le fonctionnement et assez simple.
    Faire une fonction cappable de le lire? précisons ou exemple please (par contre, je sais comment les enregistrer)

  4. #4
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Voici un sub qui permet de lire les valeurs des composantes de tous les pixels d'une image bmp 24bit:
    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
    Public Sub OpenBMPFile(FileAdr As String)
     
    Dim Boucle As Single     'variable de boucle
    Dim Largeur As Single    'largeure de l'image
    Dim Longueure As Single  'longueure de l'image
    Dim VarByte As Byte        'Varriable temporaire, recupère les octets
    Dim NbBytes As Single     'nombre total d'octets
     
    Open FileAdr For Binary As #1   'ouvre le fichier
    Get #1, 19, VarByte      'recupère la premiere partie de la largeure
    Largeur = VarByte
    Get #1, 20, VarByte      'recupère la seconde partie
    Largeur = Largeur + VarByte * 256
     
    Get #1, 23, VarByte
    Longueure = VarByte
    Get #1, 24, VarByte
    Longueure = Longueure + VarByte * 256
     
     
    'a chaque fin de ligne est rajouté un pixel blanc non visible
    'nombre total de pixels : longueure * (largeur+1)
    ' 3 octets par pixel
     
    NbBytes = 3 * Longueure * (Largeur + 1) + 54
     
    'on peu soustraire 3 car le dernier pixel est un pixel de fin de ligne non visible (+ 51 au lieu de + 54)
     
     
    For Boucle = 55 To NbBytes
    Get #1, Boucle, VarByte
    ' VarByte va prendre successivement les composantes
    ' bleu vert et rouge de tous les pixels
    ' les pixels sont lus en ligne du BAS VERS LE HAUT DE L'IMAGE.
     
    Next
     
    Close #1
     
    End Sub
    Pour les images N&B le fonctionnement est plus simple : les pixels (toujours lus du bas vers le haut en ligne) sont groupés par 8 (si il n'y en a pa assez par exemple en fin de ligne on considère qu'ils existent et qu'ils sont blancs) ce qui forme un octet.
    exemple : l'octet 181 (&hB5) équivaut en binaire 10110101 signifie:
    dans le groupe de huit pixels, le premier est blanc, le second est noir, ....


    A toi de l'exploiter si c'est ce que tu cherche.

  5. #5
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 218
    Points
    1 218
    Par défaut
    merci beaucoup.

    y a t'il moyen de faire la transformation dans l'autre sens?

    merci

  6. #6
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    c'est a dire? passer d'une images dans un picturebox a un fichier bmp?
    Je pense que oui si tu es capable de récupérer les composant RVB des pixels.

  7. #7
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 218
    Points
    1 218
    Par défaut
    non, ça je sais le faire.
    je veux savoir si apres avoir modifié le code de l'image je peux la retransformer en picture dans la picturebox?

    Au fait, j'arrive pas à mettre ton code dans une text box, pourtant, çal me semble corect:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Form_Load()
    Call OpenBMPFile("C:\ Sa.bmp")
    Text1.Text = FileAdr
    End Sub
    merci

  8. #8
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 218
    Points
    1 218
    Par défaut
    et aussi, à partir du moment ou on l'a en version texte, on peut le modifier avec couleur... (g pas trop compris)


    merci d'avance

  9. #9
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    tu as mal compris le sub.
    Je t'explique:
    déja pour l'appeler tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub Command1_Click()
    OpenBmpFile("C:\Sa.bmp")
    End Sub
    de plus le sub n'est pas complet, loin de la. il te reste toute la partie interpretation des composantes a faire. De facon plus explicite DANS le sub tu dois ajouter ton code qui traitera l'images ou qui, si tu le souhaite sauvegardera les valeures des composantes de tous les pixels. Je pense que tu ne t'es pas amusé a lire le sub car tu aurai compris, j'y ai tout documenté. Tu doi traiter la variable VarByte se trouvant dans la boucle a la fin du sub car celle actuellement ne fait que "pointer" les differentes composantes.

    petit exemple:

    tu decide de n'avoir que des composantes égales à 0 ou 255 il te faut rajouter le code suivant sous la fonction Get de la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If VarByte<128 then VarByte = 0 Else VarByte=255    'arrondie l'octet
     
    Put #1,Boucle,VarByte   'le réinscrit a son emplacement

    De plus FileAdr est une variable locale et n'est donc accessible que dans le sub.

  10. #10
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 218
    Points
    1 218
    Par défaut
    excuse moi aveilpro, je suis peut-être un crétin mais j'arrive pas à voir l'effet de ta variable.

    en effet: 1- est-il possible de voir le code en octet de l'image.?
    2- peut-on dans le cas contraire voire son effet?

    merci

  11. #11
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    alors je reexplique:
    oui il est possible de voir le code en octet de l'image: tu créer une variable dès le début de ton projet en Public par exemple et tu rajoute dans la boucle juste en dessous de la fonction Get la sauvegarde des octets:

    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
    Option Explicit
    Public ImgSauv As String
     
    Public sub Command1_Click()
    OpenBmpFile("C:\Im.bmp")
    Text1.Text = ImgSauv
    End Sub
     
    Public Sub OpenBMPFile(FileAdr As String)
    ...
    ...
    ...
     
    ImgSauv = "" 'efface la variable
     
    For ...
    Get #1, Boucle, VarByte  'ca c'est deja mis
     
    ImgSauv = ImgSauv & Str(VarByte) & " "
     
    Next Boucle
    maintenant tu peu très bien declarer la fonction ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public function OpenBMPFile(FileAdr As String) as String
    Sauver les valeur comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OpenBmpFile = OpenBmpFile & Str(VarByte) & " "
    et afficher le contenu de l'image en octet dans une boite texte de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Text1.Text=OpenBMPFile(C:\IM.bmp)
    Pour renseignement la variable FileAdr est une variable locale permettant de récupérer l'argument que tu fournit au sub (c'est a dire l'adresse de ton images). tu n'en a donc aucune utilité en dehors du sub.

    ATTENTION : n'oubli pas que chaque pixel est "composé" de 3 octets et que ce sub n'est valable que pour les Bmp 24bits.

    PS: je ne me permetrai en aucun cas de te traiter de cretin mai si tu pouvai essayer de lire tou ce que je met (meme dans le code) tu comprendrai peut-être mieu ce que j'essaye de te montrer. la fonction que j'ai donnée au debut n'étai en faite qu'une fonction capable de "pointer" les octet des composantes sans jamais rien en faire.

    Amicalement.
    bon courage

  12. #12
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 218
    Points
    1 218
    Par défaut
    ha ben ça explique pas mal de choses: j'utilisait un 16 bits

    c'est parfait je vais tester ça.

    (au fait j'ai pas dit ça par susceptibilité)

    merci encore

  13. #13
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Pour les images de definition differentes il suffit de faire quelques testes en changeant un pixel ou deux et de regarder le changement des octets pour en comprendre le fonctionnement.

  14. #14
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 218
    Points
    1 218
    Par défaut
    désolé, j'arrive pas à afficher le texte.

    voici mon 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
    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
    Private Sub Command1_Click()
    OpenBMPFile ("Sac.bmp")
    Text1.Text = OpenBMPFile("C:\sac.bmp")
    End Sub
     
     
    Public Function OpenBMPFile(FileAdr As String) As String
    Dim Boucle As Single     'variable de boucle
    Dim Largeur As Single    'largeure de l'image
    Dim Longueure As Single  'longueure de l'image
    Dim VarByte As Byte        'Varriable temporaire, recupère les octets
    Dim NbBytes As Single     'nombre total d'octets
     
    Open FileAdr For Binary As #1   'ouvre le fichier
    Get #1, 19, VarByte      'recupère la premiere partie de la largeure
    Largeur = VarByte
    Get #1, 20, VarByte      'recupère la seconde partie
    Largeur = Largeur + VarByte * 256
     
    Get #1, 23, VarByte
    Longueure = VarByte
    Get #1, 24, VarByte
    Longueure = Longueure + VarByte * 256
     
     
    'a chaque fin de ligne est rajouté un pixel blanc non visible
    'nombre total de pixels : longueure * (largeur+1)
    ' 3 octets par pixel
     
    NbBytes = 3 * Longueure * (Largeur + 1) + 54
     
    'on peu soustraire 3 car le dernier pixel est un pixel de fin de ligne non visible (+ 51 au lieu de + 54)
     
    ImgSauv = "" 'efface la variable
     
    For Boucle = 55 To NbBytes
    Get #1, Boucle, VarByte
    ImgSauv = ImgSauv & Str(VarByte) & " "
    Put #1, Boucle, VarByte 'le réinscrit a son emplacement
     
    ' VarByte va prendre successivement les composantes
    ' bleu vert et rouge de tous les pixels
    ' les pixels sont lus en ligne du BAS VERS LE HAUT DE L'IMAGE.
     
    Next
     
    Close #1
    OpenBMPFile = OpenBMPFile & Str(VarByte) & " "
    End Function
    et mon texte est: "0"

    désolé, je pige rien (pourtant, j'ai relu 10 fois ta variable.

    merci d'avance

  15. #15
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    tu n'a toujours pas compris le fonctionnement du sub:
    appel du sub tel que tu l'a déclaré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Command1_Click() 
    Text1.Text = OpenBMPFile("C:\sac.bmp") 
    End Sub
    Étant donné que tu l'utilise en temp que fonction tu n'a aucune utilisté a utiliser une variable supplémentaire.

    Il existait deux moyen de sauvegarder les octets:

    premier moyen:

    tu déclare le sub ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Sub OpenBMPFile(FileAdr As String)
    tu l'appel et tu l'affiche comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Command1_Click() 
    OpenBMPFile ("Sac.bmp") 
    Text1.Text = ImgSauve
    End Sub
    tu n'oubli pas de dimensionner une variable (exemple ImgSauv) et la sauvegarde se fait par la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImgSauv = ImgSauv & Str(VarByte) & " "
    ce qui te donne pour la fin du sub:

    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
     
    ...
     
    ...
     
    NbBytes = 3 * Longueure * (Largeur + 1) + 54 
     
    'on peu soustraire 3 car le dernier pixel est un pixel de fin de ligne non visible (+ 51 au lieu de + 54) 
     
    ImgSauv = "" 'efface la variable 
     
    For Boucle = 55 To NbBytes 
    Get #1, Boucle, VarByte 
    ImgSauv = ImgSauv & Str(VarByte) & " " 
     
    '***********************
    'Inutile car tu n'a rien a sauvegarder tu ne fait que lire.
    'Put #1, Boucle, VarByte 'le réinscrit a son emplacement 
    '***********************
     
    ' VarByte va prendre successivement les composantes 
    ' bleu vert et rouge de tous les pixels 
    ' les pixels sont lus en ligne du BAS VERS LE HAUT DE L'IMAGE. 
     
    Next 
     
    Close #1 
     
    End Sub
    OU Deuxieme moyen

    tu declare la fonction ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function OpenBMPFile(FileAdr As String) As String
    ici il est inutile de declarer une variable ce qui te donne pour la fin de la fonction:

    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
     
    ...
     
    ...
     
    NbBytes = 3 * Longueure * (Largeur + 1) + 54 
     
    'on peu soustraire 3 car le dernier pixel est un pixel de fin de ligne non visible (+ 51 au lieu de + 54) 
     
    For Boucle = 55 To NbBytes 
    Get #1, Boucle, VarByte 
    OpenBMPFile = OpenBMPFile & Str(VarByte) & " "
     
    '***********************
    'Inutile car tu n'a rien a sauvegarder tu ne fait que lire.
    'Put #1, Boucle, VarByte 'le réinscrit a son emplacement 
    '***********************
     
    ' VarByte va prendre successivement les composantes 
    ' bleu vert et rouge de tous les pixels 
    ' les pixels sont lus en ligne du BAS VERS LE HAUT DE L'IMAGE. 
     
    Next 
     
    Close #1 
     
    End Function
    tu l'appel et tu l'affiche comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Command1_Click() 
     
    Text1.Text = OpenBMPFile ("Sac.bmp") 
     
    End Sub
    N'utilise qu'une seule des solutions.

  16. #16
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 218
    Points
    1 218
    Par défaut
    Je suis désolé mais meme avec ce code:

    1-Il ne m'affiche aucun code dans le textbox
    2-Il enregistre automatiquement les images mais elles n'on comme seul points commun avec l'original que le nom. (elles onts la meme tailles et son blanches)

    bref ça ne marche pas.

    je te retransmet le code mais je l'ai toujours pas compris.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Command1_Click()
    OpenBMPFile ("c:\Sans titre.bmp")
    Text1.Text = ImgSauve
    End Sub
     
     
    Private Sub Form_Load()
    OpenBMPFile ("c:\Sans titre.bmp")
    End Sub
    et dans le module
    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
    Public Sub OpenBMPFile(FileAdr As String)
    Dim Boucle As Single     'variable de boucle
    Dim Largeur As Single    'largeure de l'image
    Dim Longueure As Single  'longueure de l'image
    Dim VarByte As Byte        'Varriable temporaire, recupère les octets
    Dim NbBytes As Single     'nombre total d'octets
     
    Open FileAdr For Binary As #1   'ouvre le fichier
    Get #1, 19, VarByte      'recupère la premiere partie de la largeure
    Largeur = VarByte
    Get #1, 20, VarByte      'recupère la seconde partie
    Largeur = Largeur + VarByte * 256
     
    Get #1, 23, VarByte
    Longueure = VarByte
    Get #1, 24, VarByte
    Longueure = Longueure + VarByte * 256
    ImgSauv = ImgSauv & Str(VarByte) & " "
     
    'a chaque fin de ligne est rajouté un pixel blanc non visible
    'nombre total de pixels : longueure * (largeur+1)
    ' 3 octets par pixel
     
    NbBytes = 3 * Longueure * (Largeur + 1) + 54
     
    'on peu soustraire 3 car le dernier pixel est un pixel de fin de ligne non visible (+ 51 au lieu de + 54)
     
    ImgSauv = "" 'efface la variable
     
    For Boucle = 55 To NbBytes
    Get #1, Boucle, VarByte
    ImgSauv = ImgSauv & Str(VarByte) & " "
     
    '***********************
    'Inutile car tu n'a rien a sauvegarder tu ne fait que lire.
    'Put #1, Boucle, VarByte 'le réinscrit a son emplacement
    '***********************
     
    ' VarByte va prendre successivement les composantes
    ' bleu vert et rouge de tous les pixels
    ' les pixels sont lus en ligne du BAS VERS LE HAUT DE L'IMAGE.
     
    Next
     
    Close #1
     
    End Sub
    merci d'avance

  17. #17
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    voici exactement le contenu pour que cela marche. Attention il n'y a pas de "e" a ImgSauv, il suffit de lancer le sub une seule fois.

    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
    Option Explicit
     
    Dim ImgSauv As String 'variable dans laquelle seront logées les composantes
     
     
    Private Sub Command1_Click()
     
    OpenBMPFile ("c:\Sans titre.bmp") 'charge les composantes dans ImgSauv
     
    Text1.Text = ImgSauv 'affiche ImgSauv
     
    End Sub
     
     
    Public Sub OpenBMPFile(FileAdr As String)
    Dim Boucle As Single     'variable de boucle
    Dim Largeur As Single    'largeure de l'image
    Dim Longueure As Single  'longueure de l'image
    Dim VarByte As Byte        'Varriable temporaire, recupère les octets
    Dim NbBytes As Single     'nombre total d'octets
     
    Open FileAdr For Binary As #1   'ouvre le fichier
     
    'la largeure peut etre supérieure a 255 c.a.d en hexa >hFF si c'est le cas l'octet de _
     poid fort (h3F par exemple pour une largeure de 16213 soit h3F55 en hexa) se trouve a _
      l'adresse 20 alors que l'octet de poid faible h55 se trouve en 19
     
      'le calcul est simple :
        'h3F = 63
        'h55 = 85
        '63 * 256 + 85 = 16213
     
    Get #1, 19, VarByte      'recupère la premiere partie de la largeure (poids faible)
    Largeur = VarByte
    Get #1, 20, VarByte      'recupère la seconde partie (poids fort)
    Largeur = Largeur + VarByte * 256
     
    'de meme pour la longueure (ou hauteur) aux adresse 23 et 24
     
    Get #1, 23, VarByte
    Longueure = VarByte
    Get #1, 24, VarByte
    Longueure = Longueure + VarByte * 256
     
    'a chaque fin de ligne est rajouté un pixel blanc non visible
    'nombre total de pixels : longueure * (largeur+1)
    ' 3 octets par pixel
     
    NbBytes = 3 * Longueure * (Largeur + 1) + 54
     
    'on peu soustraire 3 car le dernier pixel est un pixel de fin de ligne non visible _
     (+ 51 au lieu de + 54) donc inutile a lire
     
    ImgSauv = "" 'efface la variable
     
    For Boucle = 55 To NbBytes  'boucle du premier octet du premier pixel _
                                 jusqu'au dernier octet du dernier pixel
     
    Get #1, Boucle, VarByte     'récupère la valeur de la composante
     
    ImgSauv = ImgSauv & Str(VarByte) & " " 'la memorise dans la variable
     
    '***********************
    'Inutile car tu n'a rien a sauvegarder tu ne fait que lire.
    'Put #1, Boucle, VarByte 'le réinscrit a son emplacement
    '***********************
     
    ' VarByte va prendre successivement les composantes
    ' bleu vert et rouge de tous les pixels
    ' les pixels sont lus en ligne du BAS VERS LE HAUT DE L'IMAGE.
     
    Next
     
    Close #1 'ferme le fichier
     
    End Sub
    J'e t'ai documenté chacune des lignes donc lit les et tu comprendra le fonctionnement.

  18. #18
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 218
    Points
    1 218
    Par défaut
    ha OK.

    en fait, j'avais fini par commencer à piger mais j'avais cru que imgsauv était défini dans ta varible.

    bon je vais tester ça.

    merci encore et excuse-moi pour les cheuveux que tu as dû t'arracher devant mon incompétence.


    salut

    EDIT: ça marche impec.

  19. #19
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Je viens de me rendre compte d'une erreur : Il n'y a pas 1 pixel suplémentaire par ligne (ce qui ferait 3 octets) il n'y a que 2 octets par ligne.

    De plus voici 2 petites fonction permettant l'une de récupérer les composantes d'un pixel en connaissant ses coordonnées et l'autre de definir un pixel. (origine du repère en haut a gauche de coordonnées 0,0 )

    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
    Public Function GetPix(PixelX As Single, PixelY As Single) As String
     
    PixelY = Longueure - PixelY
    NumByte = 55 + (PixelY * Largeur + PixelX) * 3 + 2 * PixelY
     
    Get #1, NumByte, VarByte
    GetPix = VarByte
    Get #1, NumByte, VarByte
    GetPix = VarByte & ";" & GetPix
    Get #1, NumByte, VarByte
    GetPix = VarByte & ";" & GetPix
     
    End Function
     
    Public Sub SetPix(PixelX As Single, PixelY As Single, RCompo As Byte, GCompo As Byte, Bcompo As Byte)
     
    PixelY = Longueure - PixelY
    NumByte = 55 + (PixelY * Largeur + PixelX) * 3 + 2 * PixelY
     
    Put #1, NumByte, Bcompo
    Put #1, NumByte + 1, GCompo
    Put #1, NumByte + 2, RCompo
     
    End Sub
    ATTENTION tu doit IMPERATIVEMENT avoir declaré les variable Largeur et Longueure de facon a ce que toutes les fonction puisse y accéder, les avoir fait calculer avant de lancer l'une ou l'autre fonction ET avoir ouvert le fichier ( Open ..... as #1)

    Le fonctionnement est simple: pour definir un pixel on fait:

    definira le pixel en haut a gauche(0,0) en blanc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MonPixel As String
    MonPixel = GetPix(0,0)
    renverra les couleures RGB dans l'ordre séparées par un ";" du pixel en haut a gauche (0,0)

  20. #20
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 218
    Points
    1 218
    Par défaut
    heu, et ellle fait quoi ton erreur?

    sinon, pour largeur et hauteur, ça va m'arranger vu que j'avais du mal avec une ligne continue.

    aufait, est il possible de suprimer une ligne ou une colone à gauche?

    merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Modifier une image dynamiquement
    Par SebV dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/01/2006, 23h08
  2. [FLASH MX] Modifier une image
    Par sozie9372 dans le forum Flash
    Réponses: 4
    Dernier message: 09/12/2005, 01h24
  3. Modifier une image...
    Par laurent_ifips dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 22/11/2005, 21h40
  4. MFC + Afficher et modifier une image
    Par os dans le forum MFC
    Réponses: 4
    Dernier message: 07/03/2005, 19h20
  5. Modifier une image par pixels
    Par mateo.14 dans le forum MFC
    Réponses: 10
    Dernier message: 21/01/2005, 15h09

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