PDA

View Full Version : [C++] Come visualizzare un'immagine, scrivere a video


Mr.Gamp
02-01-2012, 15:00
Salve a tutti, devo realizzare un programma che funzioni a schermo intero e che visualizzi nei quattro angoli dello schermo un'animazione 300x300, e che mi permetta di impostare il frametime dell'animazione, inoltre dovrei poter scrivere sopra quest'animazione. Con C# e Xna ciò mi risulta patricolarmente facile da realizzare, mentre con C++ non saprei da dove partire, soprattutto quali librerie grafiche utilizzare??

Grazie in anticipo per le eventuali risposte.

mesonepigreco
08-01-2012, 23:49
Con c++ puoi usare le SDL
La questione è banale se possiedi tutti i frame dell'animazione salvati come file di immagine separate. In questo caso il problema è molto facile da risolvere.
Le SDL hanno il vantaggio di essere multipiattaforma, ti permettono di entrare in fullscreen semplicemente.

Carichi le immage in un array di surfaces
Setti un determinato framerate dell'animazione
All'interno dell ciclo principale blitti un immagine con un contatore i, incrementi il contatore, fai passare tot tempo, ripeti il ciclo.
Dovrebbe assomigliare a qualcosa del genere

#include <SDL/SDL.h>
#include <string>

SDL_Surface *load_image( std::string filename) {
SDL_Surface* loadedImage = NULL;
SDL_Surface* optImage = NULL;

loadedImage = SDL_LoadBMP( filename.c_str());
if (loadedImage != NULL) {
optImage = SDL_DisplayFormat( loadedImage );

SDL_FreeSurface( loadedImage);
}

return optImage;
}

void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* dest){
SDL_Rect offset;
offset.x = x;
offset.y = y;

SDL_BlitSurface(source, NULL, dest, &offset);
}

int main(int argc, char* args[]) {
if (SDL_Init( SDL_INIT_EVERYTHING ) == -1)
return 1;

SDL_Surface* screen = SDL_SetVideoMode(800, 600, 32, SDL_FULLSCREEN);

if (screen == NULL)
return 1;

// Carico l'animazione fatta da 200 frame nella cartella animazione
SDL_Surface* Animazione[200];
char name[100];
for (int i = 0; i < 200; ++i) {
sprintf(name, "Animazione/anim%4d", i);
Animazione[i] = load_image(name);
name[0] = '\0';
}
int count = 0;

while (count < 5000) {
apply_surface(0, 0, Animazione[count], screen);
SDL_Flip(screen);
count++;
}
SDL_Quit();

return 0;
}

mesonepigreco
08-01-2012, 23:57
Per scrivere a video puoi usare sempre le SDL, con il modulo font se non ricordo male pui generare surface di caratteri da stampare sopra le animazioni o sopra lo schermo

Mr.Gamp
14-01-2012, 23:12
Grazie è proprio quello che cercavo