Partage
  • Partager sur Facebook
  • Partager sur Twitter

Couper un morçeau de surface..

..dans une autre !

Sujet résolu
    10 avril 2006 à 0:30:20

    Salut tout le monde !!
    Je me suis attelé à la création d'un petit "Paint" pour m'entrainer avec le C, la SDL et les evenements !
    Donc c'est bien, j'y arrive, MAIS, un petit probleme se pose:

    Pour sauvegarder l'image, j'utilise un petit SDL_SaveBMP(*surface, "image.bmp");.
    Mais je voudrais sauvegarder seulement une partie de ma surface ecran car celle ci contient aussi aussi le menu et lui, je ne veut pas qu'il soit dans mon BMP !!
    J'ai fais quelques recherches mais à 14 ans, mon anglais qui est assez bon ne peut pas tout comprendre :p
    J'ai donc trouvé ceçi :
    *SDL_CreateRGBSurfaceFrom (void *pixels, int width, int height, int depth, int pitch, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);

    Aussi, n'ayant pas tout compris dans la Doc, j'ai pensé qu'on pouvais s'en servir comme ca:
    dessin = SDL_CreateRGBSurfaceFrom (void *pixels, int width, int height, int depth, int pitch, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);

    SDL_SaveBMP(dessin, "dessin.bmp");

    Mais le probleme est que je ne comprend pas ca qu'il faut mettre comme parametres :lol:
    Je pense que le premier est la surface d'origine mais le reste..aucune idée ! :-°
    D'ailleur, je ne suis meme pas sur que c'est la bonne fonction !! Si quelqu'un peut confirmer, et au passage, me donner quelques infos là dessus, je veut bien ! ;)
    Voilà le site ou j'ai trouvé ces infos: http://docsmandragor.orgfiles/files/Common_lib..
    Merçi d'avance !!
    • Partager sur Facebook
    • Partager sur Twitter
      10 avril 2006 à 7:58:37

      sinon tu peux tout simplement utiliser SDL_Rect :

      SDL_Rect rect ;

      rect.x = 100 ; /* (coordonnées de départ en X, on dit que le menu fait 100px) */
      rect.y = 0 ; /* (on dit qu'on part du haut) */
      rect.w = 540 ; /* si tu as à la base un ecran de 640 de large (car w comme width)*/
      rect.h = 480 ; /* h comme height (merci CSS lol) */


      Donc là on vient de créer une surface à laquelle il manque un bandeau de 100 px sur la gauche, comme un menu

      J'espère que ça peut t'aider
      • Partager sur Facebook
      • Partager sur Twitter
        10 avril 2006 à 10:35:57

        Ah, ouais !!! Merçi c'est cool !!!

        C'est ce que je cherchais !
        Mais si quelqu'un peut me donner des infos sur SDL_CreateRGBSurfaceFrom, je veut bien quand meme ! ;)

        Mais de toute façon, il faut que je créé une surface de travail, au lieu de dessiner direct sur le fond..comme ca, je n'ai plus qu'a enregistrer la surface !!!

        EDIT: Non, il y a un probleme (ou alors c'est moi qui suit con..), Je ne peut pas faire :
        SDL_Rect rect ;

        rect.x = 100 ; // origines
        rect.y = 0 ; // **********
        rect.w = 540 ; // hauteur
        rect.h = 480 ; // largeur

        SDL_SaveBMP(rect, "dessin.bmp");

        Comment dire que ces coordonnées s'appliquent a telle ou telle surface ?

        EDIT2: J'ai trouvé !!!
        void SDL_SetClipRect (SDL_Surface *surface, SDL_Rect *rect);


        SDL_Rect rect ;

        rect.x = 100 ; // origines
        rect.y = 0 ; // **********
        rect.w = 540 ; // hauteur
        rect.h = 480 ; // largeur

        SDL_SetClipRect (dessin, &rect);

        SDL_SaveBMP(dessin, "dessin.bmp");


        EDIT3: Aie ! Non, en fait ca marche pas..
        Y'aurais pas un super codeur C/C++ pour m'aider ?
        • Partager sur Facebook
        • Partager sur Twitter
          11 avril 2006 à 23:23:10

          SDL_BlitSurface(surface_1, &morceau_surface_1, surface_2, &morceau_surface_2);

          enjoy :)
          • Partager sur Facebook
          • Partager sur Twitter
            11 avril 2006 à 23:27:48

            Citation : Orochi

            SDL_BlitSurface(surface_1, &morceau_surface_1, surface_2, &morceau_surface_2);

            enjoy :)


            Super utile pour sauvegarder l'image :-° ...
            • Partager sur Facebook
            • Partager sur Twitter
              11 avril 2006 à 23:32:21

              Il connait déja la fonction pour sauvegarder l'image:
              SDL_SaveBMP(*surface, "image.bmp");
              Il veut juste sauvegarder une partie de sa surface écran ce qui est possible avec la fonction que j'ai donné :)
              • Partager sur Facebook
              • Partager sur Twitter
                11 avril 2006 à 23:38:14

                Citation : Orochi

                Il connait déja la fonction pour sauvegarder l'image:
                SDL_SaveBMP(*surface, "image.bmp");
                Il veut juste sauvegarder une partie de sa surface écran ce qui est possible avec la fonction que j'ai donné :)


                Oui, seulement toi tu lui donne un code pour blitter une partie de l'imgae. C'est quelque chose qui ne se passe qu'à l'affichage, ça ne modifie pas la surface en question.
                • Partager sur Facebook
                • Partager sur Twitter
                  11 avril 2006 à 23:42:27

                  Hasegawa : Blitter ça veut dire copier le contenu d'une surface dans une autre.
                  Si la surface de destination est l'écran alors ça affichera à l'écran, mais sinon ça remplira la surface en question.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 avril 2006 à 23:44:30

                    Citation : Kayl

                    Hasegawa : Blitter ça veut dire copier le contenu d'une surface dans une autre.
                    Si la surface de destination est l'écran alors ça affichera à l'écran, mais sinon ça remplira la surface en question.



                    Arf évidement, c'est ça le 1er paramètre de la fonction ! J'ai l'impression de tomber à côté de la plaque sur chaque réponse en ce moment, je vais peut être réfléchir plus longtemps avant de poster...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 avril 2006 à 11:43:50

                      Quand on blitte une surface, ca la colle sur l'ecran .. et ca , je ne veut pas.
                      Je veut juste dire
                      copier(SDL_Surface *Origine, SDL_Surface *Destination, SDL_Rect *Parametres); // J'invente..
                      :lol:
                      Je comprend pas comment .. ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 avril 2006 à 11:50:53

                        Grrr mais lis plus haut. Blitter c'est copier. L'écran est en paramètre mais ça peut etre une toute autre surface !
                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 avril 2006 à 13:21:59

                          Citation : Kayl

                          Grrr mais lis plus haut. Blitter c'est copier. L'écran est en paramètre mais ça peut etre une toute autre surface !



                          La effectivement y a de l'abus, c'est quand même écrit 3 fois. En tout cas merci Kayl, j'ai appris quelque chose comme ça.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 avril 2006 à 13:44:14

                            ah..okai !!! C'est bon !
                            J'ai compris !!!
                            Merçi tout le monde !
                            • Partager sur Facebook
                            • Partager sur Twitter
                              12 avril 2006 à 13:51:55

                              Pour un éditeur d'image, tu devrais utiliser une surface spéciale pour l'image éditée, et pas utiliser directement l'écran.
                              SDL_CreateRGBSurfaceFrom() ne te concerne pas et n'est visiblement pas de ton niveau (c'est pour créer une surface SDL à partir de pixels que tu aurais récupérés ou écrit toi-même).
                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 avril 2006 à 15:19:11

                                okai merçi !!
                                (PS: c'est pour un Paint ! :p)
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Couper un morçeau de surface..

                                × 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