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 :

Paramètres de SDL_CreateRGBSurfaceFrom


Sujet :

SDL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2
    Par défaut Paramètres de SDL_CreateRGBSurfaceFrom
    Bonjour,

    J' ai un problème lors de l' utilisation de SDL_CreateRGBSurfaceFrom.
    Le programme est censé copier une partie de l' image fond.png chargé dans la surface image dans la surface Sauvegarde et de simplement l' afficher a coté pour voir si tout a fonctionné. Mais la surface est entierement noir.
    Pouvez-vous m' aider a resoudre mon problème. merci d' avance.


    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
     
    #include <stdio.h>
     
     
     
    #include "SDL.h"
    #include "SDL_image.h"
     
    int main(int argc, char *argv[])
    {
    	Uint32 initflags = SDL_INIT_VIDEO;  
    	SDL_Surface *screen, *image, *Sauvegarde;
    	Uint8  video_bpp = 32;
    	Uint32 videoflags = SDL_HWSURFACE;
    	int    done;
     
    	SDL_Event event;
     
    	SDL_Rect position;
    	position.x = 200;
    	position.y = 0;
     
     
     
     
    	SDL_Init(initflags);
    	screen=SDL_SetVideoMode(640,480, video_bpp, videoflags);
    	SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255)); // Ecran en blanc
     
    	image = IMG_Load("/Users/Lucas/Desktop/images/fond.png"); // On charge l' image.
     
    SDL_LockSurface(image);
    	Sauvegarde = SDL_CreateRGBSurfaceFrom(image->pixels, image->w, image->h, image->format->BitsPerPixel, image->pitch, 0, 0, 0, 0);  
    SDL_UnlockSurface(image);
     
    	SDL_BlitSurface(Sauvegarde, NULL, screen, &position); 
    	SDL_BlitSurface(image, NULL, screen, NULL); // On blitt l' image dans le coin superieur gauche.
     
    	SDL_Flip(screen);
     
     
    	done = 0;
    	while ( !done ) {
     
     
    		while ( SDL_PollEvent(&event) ) {
    			switch (event.type) {
     
    				case SDL_MOUSEMOTION:
    					break;
    				case SDL_MOUSEBUTTONDOWN:
    					break;
    				case SDL_KEYDOWN:
    					/* Any keypress quits the app... */
    				case SDL_QUIT:
    					done = 1;
    					break;
    				default:
    					break;
    			}
    		}
    	}
     
        SDL_FreeSurface(image);
    	SDL_FreeSurface(Sauvegarde);
    	SDL_Quit();
    	return(0);
    }

  2. #2
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Salut,

    pour dupliquer une surface, il y a plus simple.

    De toute façon avec SDL_CreateRGBSurfaceFrom, les changement apportés à image vont aussi être apportés à Sauvegarde, à mon avis ce n'est pas ce que tu recherches.

    Si tu veux créer une copie d'une surface, crées-en une de la même taille et blit l'une dans l'autre.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2
    Par défaut
    Ba en faite je voulais pas poster tout mon code de Tetris qui est assez long, alors j' ai fait ce petit exemple rapide.
    J' ai en faite besoin de sauvegarder une partie de l' écran quand une ligne est complétée pour l' effacer et descendre tout ce qu' il y a au dessus d' un cran(une case). Donc a moins que tu me donnes une autre solution, j' ai véritablement besoin de SDL_CreateRGBSurfaceFrom.

    Merci, J.c

  4. #4
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Quand tu vas effacer la ligne de l'écran, elle va aussi être effacée de la surface que tu auras créée avant avec SDL_CreateRGBSurfaceFrom.

    Voilà un exemple de comment faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SDL_Surface *image = ....
    SDL_Surface *sauvegarde = SDL_CreateRGBSurface(image->flags, largeur, hauteur, image->bitsPerPixel, 0,0,0,0);
     
    SDL_Rect position = {x, y, largeur, hauteur};
     
    SDL_BlitSurface(image, &position, sauvegarde, NULL);
    Normalement ainsi tu "sauvegardes" une portion de ta surface SDL vers la surface sauvegarde.

Discussions similaires

  1. créer un noeuds avec des paramétres
    Par Toxine77 dans le forum XMLRAD
    Réponses: 5
    Dernier message: 21/01/2003, 16h11
  2. [xmlrad] Pb de paramètre ?
    Par Pm dans le forum XMLRAD
    Réponses: 7
    Dernier message: 07/01/2003, 14h37
  3. [SWT] Problème de paramètre GridData
    Par yolepro dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 06/12/2002, 10h37
  4. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47
  5. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24

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