Partage
  • Partager sur Facebook
  • Partager sur Twitter

Enregistrer une surface en png

comment faire ?

    20 février 2011 à 2:01:43

    Salut, j'aimerai savoir comment enregistrer une surface d'un programme pygame en une image au format png. J'ai fait quelques recherches mais je tombe toujours sur des erreurs.

    Voici les infos que j'ai pu trouver:

    Citation : Documentation pygame

    save an image to disk

    pygame.image.save(Surface, filename): return None
    


    This will save your Surface as either a BMP, TGA, PNG, or JPEG image. If the filename extension is unrecognized it will default to TGA. Both TGA, and BMP file formats create uncompressed files.

    PNG, JPEG saving new in pygame 1.8.



    Je créé ma surface:
    surf_tileset = Surface((660,68) ,512,256)
    


    J'appel la fonction:

    pygame.image.save(surf_tileset, "test.png")
    


    j'ai une erreur telle que:

    "line 414, in <module>
        pygame.image.save(surf_tileset, "test.png")
    TypeError: must be pygame.Surface, not Surface


    Du coup j'essaye un truc du genre:
    surf_tileset = Surface((660,68) ,512,256)
    
    surf_tileset2 = pygame.Surface((660,68), surf_tileset)
    


    j'appelle la fonction en modifiant "tileset" par "tileset2":
    pygame.image.save(surf_tileset2, "test.png")
    


    et j'ai ça:
    line 195, in <module>
        surf_tileset2 = pygame.Surface((660,68), surf_tileset)
    TypeError: an integer is required


    Une idée ?

    A+
    • Partager sur Facebook
    • Partager sur Twitter
      20 février 2011 à 11:58:31

      j'en conclu que tu as créées ta propre class Surface ... peut-on la voir ?
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        20 février 2011 à 12:44:49

        Ah purré ! J'avais oublié que j'avais créé une classe pour les surfaces ! Du coup ce ne sont pas des surfaces mais des rect:

        class Surface:
            """Classe définissant une surface par:
        - sa postion
        - sa taille
        """
            def __init__(self, pos, height, width):
                """Constructeur de la classe."""
                self.pos = pos
                self.height = height
                self.width = width
                self.surface = pygame.rect.Rect(pos[0],pos[1], width, height)
        


        Bon je vais voir ce que je peux faire, mais au cas ou donner moi vos tuyaux.

        A+
        • Partager sur Facebook
        • Partager sur Twitter
          20 février 2011 à 12:53:05

          ta class Surface n'est ni une pygame.Surface ni une pygame.Rect ...
          de plus, à quoi ça sert de redéfinir des attributs qui existent déjà ?
          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

            20 février 2011 à 13:31:23

            Disons que c'est ma méthode à moi ^^. Je suis que débutant, c'est vrai que je pourrai utiliser les attributs déjà créés.
            Pour revenir à la question, comment dois-je déclarer ma surface pour que je puisse l'enregistrer en png ?

            A+
            • Partager sur Facebook
            • Partager sur Twitter
              20 février 2011 à 22:42:00

              faudrait déjà qu'il y ait une surface ...
              je ne comprends pas ce que tu veux enregistrer ...
              • Partager sur Facebook
              • Partager sur Twitter

              Python c'est bon, mangez-en. 

                21 février 2011 à 0:08:22

                Ah, ok, je vais mieux m'expliquer: Je code un éditeur de jeu 2D, et je pensais pouvoir enregistrer la map que l'on vient de créer au format png:

                Image utilisateur

                J'aimerai pouvoir enregistrer, comme un screen, la zone rouge. Donc je pense qu'il faut déjà créer une surface de la même dimension et à la bonne position (chose que je ne sais pas faire ) puis utiliser la fonction pour enregistrer dans un fichier en .png.

                Voilà, en espérant m'être bien exprimé.
                • Partager sur Facebook
                • Partager sur Twitter
                  21 février 2011 à 0:47:30

                  un screenshot en gros ...
                  admettons que "screen" soit ta surface de rendu et "red_rect" le rectangle correspondant à la zone rouge.
                  image.save(screen.subsurface(red_rect),"monfichier.png")
                  
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Python c'est bon, mangez-en. 

                  Enregistrer une surface en png

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown