2017-04-06 1 views
1

Im travaillant sur un projet avec mon ami et nous avons rencontré un problème avec les surfaces et les fenêtres dans SDL.Comment afficher une image sur un rectangle défini par l'utilisateur avec SDL_surface?

Actuellement, nous sommes en mesure de créer une fenêtre et d'afficher un rectangle sur cette fenêtre et le déplacer. La prochaine chose que nous voulons faire est de prendre une image et l'afficher sur un rectangle, puis déplacez-le autour de l'écran.

Nous avons commencé par prendre la SDL_window * et la transformer en SDL_surface * bien que cela prenne l'image et l'affiche sur l'arrière-plan de la fenêtre.

Existe-t-il un moyen de transformer un rectangle créé en surface et d'afficher l'image sur ce rectangle?

J'ai également essayé d'utiliser des textures et cela déforme l'image lorsque j'essaie de la déplacer et que toute l'image ne bouge pas avec le rectangle.

// cela se produit dans le constructeur

temp_image_sur = IMG_Load(image_location.c_str()); 

if(temp_image_sur == NULL) 
{ 
    std::cout << "Image could not be loaded" <<std::endl; 
    exit(1); 
} 

// Ceci est la fonction de tirage réelle.

display_surface = SDL_GetWindowSurface(display_window); 
if(display_surface == NULL) 
{ 
    printf(" null im exiting here %s\n", SDL_GetError()); 
    exit(1); 
} 
image_surface = SDL_ConvertSurface(temp_image_sur, display_surface->format, 0); 

image_size = { this->location.x, this->location.y, this->size.width, this->size.height }; 

SDL_BlitSurface(image_surface, &image_size, display_surface, &image_size); 

C'est ce que nous avons fait pour notre première tentative, et l'image était affichée sur la fenêtre de base. Je crois que je comprends pourquoi il affiche sur la fenêtre de base, c'est parce que nous utilisons cette fenêtre comme surface, bien que je suis confus comment faire un rectangle défini par l'utilisateur la surface?

Nous avons essayé d'utiliser SDL_CreateRGBSurface, bien que rien ne soit affiché à l'écran lorsque nous faisons cela non plus.

display_surface = SDL_CreateRGBSurface(0, this->size.width, this->size.height, 1, this->color.red, this->color.green, this->color.blue, this->color.alpha); 

Merci les gars! S'il vous plaît laissez-moi savoir si il n'y a plus d'informations dont vous avez besoin, c'est ma première publication et j'ai essayé de mettre toutes les informations que je pouvais penser.

Répondre

0

Créer une texture de votre surface d'image en utilisant SDL_CreateTextureFromSurface:

SDL_Texture* image_surface = SDL_CreateTextureFromSurface(renderer, temp_image_sur); 

(rappelez-vous le libérer avec SDL_DestroyTexture)

puis utilisez SDL_RenderCopy pour dessiner:

SDL_RenderCopy(renderer, image_texture, nullptr, &image_rect); 

image_rect est un SDL_Rect et le rectangle de destination que vous voulez dessiner votre image, par exemple e:

SDL_rect image_rect = {10, 10, 200, 200}; 

Pour déplacer votre image changer simplement image_rect.x et/ou image_rect.y

+0

MERCI !! Ça a bien marché! – Garrison