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

SDL Discussion :

Problème de Transparence avec SGE


Sujet :

SDL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 16
    Points
    16
    Par défaut Problème de Transparence avec SGE
    Bonjour a tous,
    Je vien de réussir a faire une rotation sur une image(en SDL) avec SGE(http://www.etek.chalmers.se/~e8cal1/sge/)
    et déjà j'ai des problèmes...

    En effet j'utilise sge_transforme pour effectuer ma rotation, mais mon image perd sa transparence... et c'est moche!
    Alors j'ai essayer sge_transforme_surface mais j'arrive pas trop a utiliser cette fonction.
    voilà
    merci pour votre aide

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Je ne connais pas SGE mais je sais que SDL_gfx permet de faire, entre autre, des rotations de surfaces en conservant la transparence...

    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
    107
    108
    109
    110
    111
    112
    113
     
    #include <SDL.h>
    #include <SDL_rotozoom.h>
    #include <iostream>
     
     
    const int WIDTH=640;
    const int HEIGHT=480;
     
    int main(int argc, char **argv)
    {
        //Déclaration des variables
        SDL_Event event;
        SDL_Surface *screen, *image, *newsurf=NULL;
        int done = 0,w,h;
        Uint32 screen_noir;
        SDL_Rect rect = {200,200,0,0};
        double angle = 0.0;
     
     
        //Initialisation de SDL
        if(SDL_Init(SDL_INIT_VIDEO)!=0)
        {
            std::cerr << "Probleme pour initialiser SDL" << SDL_GetError() << std::endl;
            return 1;
        }
     
        //Mettre un titre à la fenêtre
        SDL_WM_SetCaption("Rotations!!!!", NULL);
     
        //Ouvrerture d'une surface pour l'affichage de la fenêtre
        screen = SDL_SetVideoMode(WIDTH,HEIGHT, 32,
                                  SDL_DOUBLEBUF | SDL_HWSURFACE);
     
        //Chargement d'une jolie image
        image = SDL_LoadBMP("test.bmp");
        SDL_SetColorKey(image,SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(image->format,255,0,255));
     
        if((screen==NULL)||(image==NULL))
            done = 1;
     
        //Couleur noire de l'ecran
        screen_noir = SDL_MapRGB(screen->format,0,0,0);
     
        //Boucle generale
        while(!done)
        {
            //Traiter les évènements
            while(SDL_PollEvent(&event))
            {
                switch(event.type)
                {
                    //Si on veut quitter, done=1 suffira
                    case SDL_QUIT:
                    done=1;
                    break;
                    //Si on vient de relacher une touche de clavier
                    case SDL_KEYUP:
                    //Et si c'est la lettre q
    		/*
    		 Attention, ceci ne fonctionne pas avec tous les Systèmes d'exploitation et tous les claviers
    		 Pour le rendre portable, il faudrait passer par les Unicodes, mais cela sort du cadre de ce tutoriel
    		 d'introduction.
    		 Si vous voulez utiliser la lettre 'q' pour quitter et ceci ne fonctionne pas, alors c'est la lettre
    		 'a' qu'il faudra utiliser (c'est la place de la lettre 'q' sur le clavier QWERTY).
    		 Si vous voulez vraiment la lettre 'q', remplacer SDLK_q par SDLK_a, cela devrait faire l'affaire
    		 */
                    if(event.key.keysym.sym==SDLK_q)
                        //On met done a 1 pour quitter
                        done=1;
                    break;
                    //Sinon on ne fait rien
                    default:
                    break;
                }
            }
     
    	//On detruit l'ancienne rotation
    	SDL_FreeSurface(newsurf);
     
    	//On cree la nouvelle surface
    	newsurf = rotozoomSurface(image, angle, 1.0, 1);
     
            if(newsurf==NULL)
              {
               done = 1;
              }
             else
              {
     	  //Puisque la taille va changer, on veut garder le centre de l'image au meme endroit...
    	  rotozoomSurfaceSize(image->w,image->h,angle,1.0,&w,&h);
    	  rect.x = WIDTH/2 - w/2;
    	  rect.y = HEIGHT/2 - h/2;
     
    	  angle += 1;
    	  if(angle>360.0)
    		angle=0.0;
     
    	  //On remplit de noir
    	  SDL_FillRect(screen,NULL,screen_noir);
    	  //On copie l'image
    	  SDL_BlitSurface(newsurf,NULL,screen,&rect);
    	  //On flip
    	  SDL_Flip(screen);
              }
        }
     
        SDL_FreeSurface(screen);
        SDL_FreeSurface(image);
        SDL_FreeSurface(newsurf);
        SDL_Quit();
        return 0;
    }

    - Si tu veux continuer à utiliser SGE, pourquoi ne pas simplement remettre en place ta couleur transparente?

    Jc

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

Discussions similaires

  1. Problème de transparence avec OpenGL
    Par yann458 dans le forum OpenGL
    Réponses: 15
    Dernier message: 16/12/2011, 08h43
  2. Problème de transparence avec un JDialog
    Par SheikYerbouti dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 22/12/2010, 11h43
  3. [ImageMagick] Transparence avec imagecopyresampled()
    Par kryogen dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 25/11/2007, 19h46
  4. Réponses: 13
    Dernier message: 01/12/2005, 05h34
  5. Réponses: 5
    Dernier message: 18/03/2005, 20h10

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