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 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
#include <stdio.h>
#include <string>
#include <stdint.h>
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
//déclaration des surfaces
SDL_Rect position;
position.x=0;
position.y=0;
int ligne = 15, colonne = 15;
SDL_Surface *image_source = NULL, *image_cible = NULL;
image_cible = SDL_CreateRGBSurface(0, colonne * 512, ligne * 512, 32, 0, 0, 0, 0);//512 est la taille des plus petite image en pixel
char axeX[3]={'0'};//sert à pouvoir convertir des chiffre en charactère pour donner la bonne direction pour aller chercher les photos
char axeY[3]={'0'};//sert à pouvoir convertir des chiffre en charactère pour donner la bonne direction pour aller chercher les photos
//boucle qui parcours le disque pour assemblé les photos
for(int i = 0 ; i < ligne ; i++)
{
for(int j = 0 ; j < colonne ; j++)
{
sprintf(axeY,"%d",(j-8));//convertion coordonné en char
sprintf(axeX,"%d",(i-8));//convertion coordonné en char
/*création du path en string*/
string path="./toute/photo/";
path.append(axeX);
path.append(",");
path.append(axeY);
path.append(".png");
/*convertion string en const char*/
char temp[path.length()+1];
size_t length =path.copy(temp,path.length());
temp[length]='\0';
cout<< temp<<endl;
/* vas cherhcer le fichier*/
SDL_RWops *file = SDL_RWFromFile( temp , "rb");
image_source=IMG_LoadPNG_RW(file);
/*calcule la position de l'image dans la grosse image*/
position.x = image_source->w * j;
position.y = image_source->h * i;
/*l'insert dans la grande
SDL_BlitSurface(image_source, NULL, image_cible, &position);
}
}
/*sauvegarde + libère l'espace*/
IMG_SavePNG(image_cible, "map.png");//ligne problématique si je l'enlève j'ai aucun porblème.
SDL_FreeSurface(image_cible);
if (SDL_Init(SDL_INIT_VIDEO) != 0 )
{
fprintf(stdout,"Échec de l'initialisation de la SDL (%s)\n",SDL_GetError());
return -1;
}
{
/* Création de la fenêtre */
SDL_Window* pWindow = NULL;
pWindow = SDL_CreateWindow("Ma première application SDL2",SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
1000,
1000,
SDL_WINDOW_SHOWN);
SDL_Renderer *pRenderer = SDL_CreateRenderer(pWindow,-1,SDL_RENDERER_ACCELERATED);
if ( pRenderer )
{
/*prend un image plus petite(j'arrive pas à afficher la grandre au complet)*/
SDL_RWops *file = SDL_RWFromFile("./toute/photo/0,0.png", "rb");
image_source=IMG_LoadPNG_RW(file);
if(image_source)
{
SDL_Texture* pTexture = SDL_CreateTextureFromSurface(pRenderer, image_source);
if(pTexture)
{
SDL_Rect dest = { 640/2 - image_source->w/2,640/2 - image_source->h/2, image_source->w, image_source->h};
SDL_RenderCopy(pRenderer,pTexture,NULL,&dest);
SDL_RenderPresent(pRenderer);
SDL_Event event; /* La variable contenant l'événement */
int continuer = 1; /* Notre booléen pour la boucle */
while (continuer) /* TANT QUE la variable ne vaut pas 0 */
{
SDL_WaitEvent(&event); /* On attend un événement qu'on récupère dans event */
switch(event.type) /* On teste le type d'événement */
{
case SDL_QUIT: /* Si c'est un événement QUITTER */
continuer = 0; /* On met le booléen à 0, donc la boucle va s'arrêter */
break;
case SDL_KEYDOWN: /* Si appui sur une touche */
switch (event.key.keysym.sym)
{
case SDLK_q: /* Appui sur la touche Q, on arrête le programme */
continuer = 0;
break;
}
break;
}
}
SDL_DestroyTexture(pTexture); // Libération de la mémoire associée à la texture
}
else
{
fprintf(stdout,"Échec de création de la texture (%s)\n",SDL_GetError());
}
SDL_FreeSurface( image_source); // Libération de la ressource occupée par l'image
}
else
{
fprintf(stdout,"Échec de chargement du sprite (%s)\n",SDL_GetError());
}
SDL_DestroyRenderer(pRenderer); // Libération de la mémoire du SDL_Renderer
}
else
{
fprintf(stdout,"Échec de création du renderer (%s)\n",SDL_GetError());
}
/*fermeture*/
if( pWindow )
{
SDL_DestroyWindow(pWindow);
}
else
{
fprintf(stderr,"Erreur de création de la fenêtre: %s\n",SDL_GetError());
}
}
SDL_Quit();
return 0;
} |
Partager