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 :

Blitter une surface en transparence


Sujet :

SDL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Par défaut Blitter une surface en transparence
    Bonjour,
    j'ai une surface (img) qui n'a pas été crée avec de la transparence.

    elle à été crée ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    base = SDL_CreateRGBSurface(SDL_HWSURFACE, width , newheight, 32, 0, 0, 0, 0);
    SDL_SetColorKey( base, SDL_RLEACCEL | SDL_SRCCOLORKEY, 
                       SDL_MapRGB( base->format, 255, 0, 255) );
    img = SDL_DisplayFormat( base );
    j'ai dessiné quelques trucs dessus (SDL_BlitSurface(...))
    et maintenant je voudrai savoir si je peux dessiner un rectangle ayant de la transparence dedans ? (au final l'image n'aura pas de transparence)
    j'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SDL_Rect r = {100,50,500,400};
    SDL_FillRect(img, &r, SDL_MapRGBA(img->format,198,147,10,128));
    ca ne marche pas... pas de transparence...

    J'avoue que je n'ai pas l'habitude d'utiliser ce canal alpha, et comme au final mon image "img" n'a pas besoin de canal alpha je ne pense pas qu'il soit necessaire de modifier la manieredont je l'ai crée. ("img" ne va pas être appliqué avec un canal alpha, c'est juste pour construire celle-ci) .. je pense...

    quelle est la bonne methode ?
    voilà, merci de votre aide.

  2. #2
    Membre Expert

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Par défaut
    est-ce que tu as essayé avec SDL_BlitSurface ?

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  3. #3
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Par défaut
    Bonjour,

    Peut être que ces tutos pourront t'aider à mieux comprendre comment ça fonctionne :
    http://loka.developpez.com/tutoriel/sdl/transparence/
    http://loka.developpez.com/tutoriel/sdl/alphaBlending/

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Par défaut
    oui en fait j'ai mis quelques temps a comprendre, mais on ne peux pas faire un fillRect en transparence directement.
    il faut créer une surface que l'on utilisera pour la transparence, on dessine ce que l'on veux dedans, et enfin on applique cette surface à la premiere.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // la surface temporaire...
    SDL_Surface * transp = SDL_CreateRGBSurface(SDL_HWSURFACE, screen->w, screen->h, 32, 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff);
    SDL_SetAlpha(transp, SDL_SRCALPHA, 127);
     
    Uint32 coul1= SDL_MapRGBA(transp->format,r,g,b,50); // ce 50 est le niv de transparence souhaité
    re= Rect(x,y,w,h); // la zone en question
    SDL_FillRect(transp, &re, coul1);
     
    // et enfin, on blit
    SDL_BlitSurface(transp, NULL, base, NULL); // base est l'image... de base...
    SDL_FreeSurface(transp);
    voilà, si ca peux servir a qqun d'autre...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/03/2009, 21h50
  2. blitter une image
    Par colargol dans le forum DirectX
    Réponses: 2
    Dernier message: 25/10/2002, 15h38
  3. Effet Fade In / Fade Out sur une surface DirectDraw
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 08/09/2002, 17h37
  4. Sauvegarder une surface dans un fichier
    Par Freakazoid dans le forum DirectX
    Réponses: 6
    Dernier message: 18/08/2002, 15h23
  5. Redimensionnement d'une surface
    Par Freakazoid dans le forum DirectX
    Réponses: 4
    Dernier message: 01/07/2002, 22h01

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