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

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的原始大小。

3、补充一点:SDL的坐标如下图所示,横向的为x轴,纵向的为y轴,往箭头方向x或y值就越大。
假如手机分辨率为1280*720,那么右上角坐标(720,0)。左下角(0,1280)。右下角(720,1280)。中心坐标(720/2,1280/2),即(360,640)。

4、第十行用结构体SDL_Texture创建一个指针变量。而SDL_CreateTextureFromSurface函数从字面上就猜到了,根据surface创建texture,函数返回一个结构体SDL_Texture的指针变量。
surface不能直接用在renderer上,所以需要转换成texture,texture相当于绘画的素材。

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

6、在退出程序之前不要忘记释放内存。
SDL_FreeSurface:释放surface
SDL_DestroyTexture:销毁texture

7、运行结果

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