SDL2入门(二)显示一张bmp格式的图片

2025-10-10 19:52:37

1、首先要把这张图片“问号.bmp”加载到内存中。利用函数SDL_LoadBMP,函数参数为一个图片路径字符串,函数返回一个surface指针。用结构体SDL_Surface的指针变量surface去接受。

SDL2入门(二)显示一张bmp格式的图片

2、第九行创建了SDL_Rect的一个结构体变量box用来存储surface的显示坐标和大小。

surface->w、surface->h分别是surface的宽度和高度。

box有四个成员变量,分别是box.x、box.y、box.w、box.h。前两个是surface的显示坐标,后两个是surface的显示大小。

这里我把surface显示在屏幕的左上角,显示坐标(0,0),显示大小刚刚好是surface的原始大小。

SDL2入门(二)显示一张bmp格式的图片

3、补充一点:SDL的坐标如下图所示,横向的为x轴,纵向的为y轴,往箭头方向x或y值就越大。

假如手机分辨率为1280*720,那么右上角坐标(720,0)。左下角(0,1280)。右下角(720,1280)。中心坐标(720/2,1280/2),即(360,640)。

SDL2入门(二)显示一张bmp格式的图片

4、第十行用结构体SDL_Texture创建一个指针变量。而SDL_CreateTextureFromSurface函数从字面上就猜到了,根据surface创建texture,函数返回一个结构体SDL_Texture的指针变量。

surface不能直接用在renderer上,所以需要转换成texture,texture相当于绘画的素材。

SDL2入门(二)显示一张bmp格式的图片

5、第十一行SDL_RenderCopy是把texture粘贴在renderer上。函数参数:NULL表示texture截取的部分,这里为全部;&box表示texture在window上的显示坐标和显示大小。

SDL2入门(二)显示一张bmp格式的图片

6、在退出程序之前不要忘记释放内存。

SDL_FreeSurface:释放surface

SDL_DestroyTexture:销毁texture

SDL2入门(二)显示一张bmp格式的图片

7、运行结果

SDL2入门(二)显示一张bmp格式的图片

8、总结绘图方式:SDL_Surface*->SDL_Texture*->SDL_Renderer*->SDL_Window*

代码:

#include <SDL2/SDL.h>

int main(int argc,char**argv)

{

SDL_Init(SDL_INIT_VIDEO);

SDL_Window*window=SDL_CreateWindow("显示bmp图片", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 720, 1280, SDL_WINDOW_SHOWN);

SDL_Renderer*renderer=SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

SDL_RenderClear(renderer);

SDL_Surface*surface=SDL_LoadBMP("./resource/问号.bmp");

SDL_Rect box={0, 0, surface->w-50, surface->h-50};

SDL_Texture*texture=SDL_CreateTextureFromSurface(renderer, surface);

SDL_RenderCopy(renderer, texture, &box, &box);

SDL_RenderPresent(renderer);

SDL_Delay(2000);

SDL_FreeSurface(surface);

SDL_DestroyTexture(texture);

SDL_DestroyRenderer(renderer);

SDL_DestroyWindow(window);

SDL_Quit();

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢