gpt4 book ai didi

c++ - 如何使用 SDL_surface 在用户定义的矩形上显示图像?

转载 作者:太空宇宙 更新时间:2023-11-04 13:03:39 26 4
gpt4 key购买 nike

我和我的 friend 一起处理一个项目,我们遇到了 SDL 中的表面和窗口问题。

目前我们能够创建一个窗口并在该窗口上显示一个矩形并四处移动。接下来我们要做的是拍摄图像并将其显示在一个矩形上,然后在屏幕上移动它。

我们首先采用 SDL_window* 并将其转换为 SDL_surface*,尽管这会采用图像并将其显示在窗口的背景上。

有没有办法将我们创建的矩形变成一个表面并在该矩形上显示图像?

我也尝试过使用纹理,当我试图移动它时它会扭曲图像,整个图像不会随着矩形移动。

//这发生在构造函数中

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);
}

//这是在实际绘制函数中。

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 );

这是我们第一次尝试时所做的,图像显示在基本窗口中。我相信我明白为什么它显示在基本窗口上,这是因为我们使用该窗口作为表面,尽管我很困惑如何使用户定义的矩形表面?

我们确实尝试过使用 SDL_CreateRGBSurface,但是当我们这样做时屏幕上也没有显示任何内容。

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

谢谢大家!如果您需要更多信息,请告诉我,这是我第一次发帖,我尽量把我能想到的所有信息都放上来。

最佳答案

使用 SDL_CreateTextureFromSurface 从图像表面创建纹理:

SDL_Texture* image_surface = SDL_CreateTextureFromSurface(renderer, temp_image_sur);

(记得用 SDL_DestroyTexture 释放它)

然后使用 SDL_RenderCopy绘制它:

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

其中 image_rectSDL_Rect以及要将图像绘制到的目标矩形,例如:

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

要移动图像,只需更改 image_rect.x 和/或 image_rect.y

关于c++ - 如何使用 SDL_surface 在用户定义的矩形上显示图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43261233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com