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 :

Format d'images


Sujet :

SDL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 109
    Points : 121
    Points
    121
    Par défaut Format d'images
    Je suis en train de programmer un moteur 2D gérant son, déplacement et évênements avec la SDL.

    Ma carte graphique est excellente, donc pas de soucis niveau puissance, cependant je souhaite pouvoir m'adapter à des ordinateurs plus anciens donc je me dois de proposer des formats différents d'images (8, 16 24 ou 32 bits) ainsi que certaines fonctions d'accélération proposée par la SDL.

    Voici donc mon problème :
    - Quand je teste sur mon PC, le seul mode que je peux utiliser est le mode 24bits. Si j'essaie 32 ou 16, j'ai des bugs d'affichage notamment sur les transparences et les effaçages d'images (c'est très net avec les animations), sachant que la SDL me propose évidemment le mode 32bits.

    J'utilise des formats bitmaps actuellement de taille différentes mais grâce à la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_DisplayFormat(SDL_Surface* s)
    où s est la surface dont il faut modifier le format (donc convertir en 24bits)

    Tout s'affiche parfaitement, les sélections sont ok, drag and drop aussi, scrolling ok etc...


    Pour l'affichage, j'utilise la SDL_BlitSurface() classique, quand je veux effacer une image, je réaffiche la portion de fond-d'écran par dessus.
    Quand je change de fond-d'écran ou qu'il y a un scrolling, alors j'affiche une image noire puis le nouveau fond-d'écran.
    J'ai remarqué que tout semble mieux fonctionner quand il y a scrolling pour les mode 16 et 32 bits (lol).

    Autre fonction utilisée, la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_MapRGB(format_img,r,g,b)
    pour la transparence (colorkey) où r,g,b vont de 0 à 255 et format_img le format de l'image concernée.
    J'avais des soupçons car utiliser ce système r,g,b en mode 16 bits [par exemple), ça colle pas, pourtant j'ai lu que la SDL faisait les conversions si nécessaires alors je crois sur parole


    Je voudrai donc savoir :
    - Pourquoi ça ne marche qu'en 24bits ? Est-ce un format spécial comparé au 16 ou 32bits? J'ai oublié quelque chose? SDL_MapRGB me joue des tours et je ne sais pas l'utiliser correctement ??

    Merci et bonnes fêtes

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Utilisation courante de SDL_MapRGB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_MapRGB (screen->format, r, g, b)
    screen est en générale le pointeur initialisé par la création de la fenêtre (sauf dans certains cas quand même) donc par la même occasion, du mode vidéo que tu peut mettre sans problème sur 32bits !

    Moi j'ai toujours fait de la sorte sans avoir de problème avec des BMP en 32bits voir 24bits ! Ce que je fait en générale aussi, lorsque je doit tout redessiner, y compris le fond, j'efface d'abord l'écran avec un appel à SDL_FillRect comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_FillRect (screen, NULL, 0);
    Quant à la différence entre 16, 24 et 32 bits pour un BMP, je ne sais pas trop mais en tous ce dont je suis quasiment sûr, c'est que la palette de couleur rentre largement en ligne de compte !

    Pour un exemple complet de gestion de la transparence sur une surface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       SDL_SetColorKey (
     
          p_surf,
     
          SDL_SRCCOLORKEY,
     
          SDL_MapRGB (p_surf->format, R_ALPHA, V_ALPHA, B_ALPHA));
    où les valeur r, g, b dans le code ci-dessus définit la couleur rose (un genre de rose bonbon ) dont voici les valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #define R_ALPHA 255
     
    #define V_ALPHA 0
     
    #define B_ALPHA 255
    couleur qui doit bien évidement être dans les zones des bitmaps à rendre transparentes !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

Discussions similaires

  1. Format d'Images
    Par medchok dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/01/2006, 21h21
  2. Réponses: 2
    Dernier message: 07/12/2005, 15h15
  3. Format d'image .RAW ?
    Par shifty.net dans le forum OpenGL
    Réponses: 3
    Dernier message: 10/06/2004, 16h06
  4. Format d'image et texture directx
    Par Johngame dans le forum DirectX
    Réponses: 1
    Dernier message: 04/02/2004, 22h39
  5. question sur le format des images ..
    Par vbcasimir dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 28/08/2003, 13h08

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