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

Tkinter Python Discussion :

afficher un pgm dans un canvas après conversion des pixel en base 16


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Par défaut afficher un pgm dans un canvas après conversion des pixel en base 16
    Creator SPN4.py

    Bonjour, voila mon problème je dois réaliser un exercice en gros je dois créer une fenêtre contenant un canevas dans laquelle je doit taper le nom d'un fichier fichier PGM a ouvrir et en cliquant sur ouvrir , le programme en python doit récupérer les valeur du fichier PGM les convertir en base 16 car elle sont en base 10 et ensuite recréer l'image pixel par pixel dans le canevas

    j'ai déjà créer l'interface graphique et la fonction conversion base 16 qui me convertit bien un nombre en base en base 16
    ma fonction "conversionimage" fonctionne également car elle copie en fait le fichier PGM et l'inscrit dans un tableau

    ce que je n'arrive pa a faire c'est a réunir tout ce petit bordel pour la fonction "afficherimage" qui doit recréer l'image dans le canevas pixel par pixel

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    L'histoire commence par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> import tkinter as tk
    >>>
    >>> W, H = 600, 400
    >>>
    >>> app = tk.Tk()
    >>> w = tk.Canvas(width=W, height=H, bg="black")
    >>> w.pack()
    Jusque la tout va bien: on a juste construit un Canvas...
    Pour la création de l'image via PhotoImage on donne juste la taille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> im = tk.PhotoImage(width=W, height=H)
    >>> w.create_image((0,0), image=im, anchor='nw')
    1
    Maintenant, on va peindre des points en blanc (#ffffff).
    Juste pour faire "joli" on va tracer y = sin(x):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> from math import sin
    >>> for x in range(4 * W):
    ...     y = int(H/2 + H/4 * sin(x/80.0))
    ...     im.put("#ffffff", (x//4, y))
    ...
    Et voila...
    Par contre pour faire le mapping de vos nombres en base 16 avec l'image, ca j'ai rien compris.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Par défaut Merci de ta reponse mais ...
    en fait d'après ce que j'ai compris le canevas ne lira pas les donné du fichier PGM car c'est un canvevas et pas photoshop ou gimp il faut donc convertir les pixel du fichier PGM ( 200 , 255 , 107 , 108 , 130) en base 16 afin d'obtenir par exemple 6B qui est la base 16 de 107 ou ff la base 16 de 255 et ces valeur peuvent ètre interpreté par le canevas dans ce cas

  4. #4
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Par défaut voila mon code a modifier
    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
    # -*- coding: cp1252 -*-
    from Tkinter import*
    from random import*
    from time import*
     
     
    def conversionimage(fich1):
        for i in range(0,4):
            fich1.readline()
     
     
        text=fich1.readline()
        while text !="":
            t=[]
            for i in range (0,410):
                text=fich1.readline()
                t.append(text)
     
        afficheimage()
     
     
     
    def afficheimage():
     
            zone_dessin.create_rectangle(1,1,10,10)
     
     
     
     
     
     
    def conversionbase16():
        t2=[]
        nb=NomFichSource.get()
        nume=1
        nb=int(nb)
        nume=nb//16
        rest=nb%16
        if rest==10:
            rest='A'
        if rest==11:
            rest='B'
        if rest==12:
            rest='C'
        if rest==13:
            rest='D'
        if rest==14:
            rest='E'
        if rest==15:
            rest='F'
        if rest==16:
            rest='G'
        t2.append(rest)
        while nume!=0:
            rest=nume%16
            nume=nume//16
            if rest==10:
                rest='A'
            if rest==11:
                rest='B'
            if rest==12:
                rest='C'
            if rest==13:
                rest='D'
            if rest==14:
                rest='E'
            if rest==15:
                rest="F"
            if rest==16:
                rest='G'
            t2.append(rest)
        t2.reverse()
        print t2
     
     
     
     
    def ouvrir():
     
        N=NomFichSource.get()
        fich1=open(N,"r")
        obj5.config(text='fichier ouvert')
        conversionimage(fich1)
        fich1.close()
     
     
     
    fen=Tk()
    fen.title("CREATOR SPN4")
    fen.geometry('600x600')
    zone_dessin=Canvas(fen,width=410,height=310,bg='white')
    zone_dessin.pack()
     
    obj1=Label(fen,text='NomFichSource')
    obj1.pack()
    NomFichSource=Entry(fen,width=30)
    NomFichSource.pack()
    obj3=Button(fen,text='Valider',command=ouvrir)
    obj3.pack()
    obj4=Label(fen,text='Info:')
    obj4.pack()
    obj5=Label(fen,text='aucune information')
    obj5.pack()
     
     
    fen.mainloop()

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par amayer Voir le message
    en fait d'après ce que j'ai compris le canevas ne lira pas les donné du fichier PGM car c'est un canvevas et pas photoshop ou gimp il faut donc convertir les pixel du fichier PGM ( 200 , 255 , 107 , 108 , 130) en base 16 afin d'obtenir par exemple 6B qui est la base 16 de 107 ou ff la base 16 de 255 et ces valeur peuvent ètre interpreté par le canevas dans ce cas
    Si vous même n'avez pas trop compris ce que vous voulez faire, ce que je raconte risque de ne pas aider.
    Essayez de voir ce que raconte ce tuto. Il montre BitmapImage (plutôt que PhotoImage).
    Si on associe a chaque pixel un nombre dans 0..255, on aura au mieux des niveaux de gris.

    Pour convertir en base 16 le contenu d'un fichier qui contient une suite de nombres en base 10, essayez d'abord de faire ça sans l'interface graphique. A priori, c'est une fonction qui récupère le nom du fichier en entrée et qui retournera une liste de...
    Votre code est un peu gribouille: il ouvre le fichier ici, lit les lignes plus loin, met a jour l'affichage par ailleurs,...
    Pourquoi ne pas avoir simplement une fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def convertir(nom):
          results = []
          lines = open(nom).read().splitlines()
          for line in lines:
               ... le boulot de découpage des lignes en nombre 
               ... et de leur conversion en hexa a empiler dans "results"
          return results
    Il sera plus facile pour vous de mettre d'abord cette fonction au point, sans en plus galérer avec l'interface graphique.
    Puis vous verrez bien ce que vous pourrez faire pour afficher "results".
    -*- Edit -*-
    Pour exprimer sous forme hexa un nombre, utilisez la fonction hex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> n = int('123')
    >>> hex(n)
    '0x7b'
    ou écrivez votre fonction myhex(n), éventuellement plus tard.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Afficher une élément dans un Canvas après un clic sur un bouton
    Par D-Day dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 28/02/2010, 19h39
  2. afficher un TextField dans un jPanel apres un clic
    Par harris_macken dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 28/03/2008, 09h00
  3. afficher une image dans un canvas
    Par alex.blais dans le forum Tkinter
    Réponses: 4
    Dernier message: 08/12/2007, 18h29
  4. afficher une image dans un canvas
    Par Arrakis dans le forum Tkinter
    Réponses: 1
    Dernier message: 05/03/2007, 13h22
  5. Tout bête : afficher un point dans un canvas
    Par netsabes dans le forum Delphi
    Réponses: 1
    Dernier message: 19/09/2006, 23h48

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