SDL2.0加载显示图片——HelloWorld!

引言
  • 通过SDL库调用实验的完成,现在将要完成一幅图片的显示程序。期待~
步骤:
1、创建窗口
SDL_Window *win = SDL_CreateWindow("Hello World!",
			 SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
			 680, 300, SDL_WINDOW_SHOWN);
  • SDL_CreateWindow(“窗体名”, “x的值”, “y的值”, “窗口的长”, “窗口的高”, 显示模式);
  • 注意,这里的x,y的值是窗体的左上角距离屏幕的左上角的距离,如下图所示:
  • 这里的SDL_WINDOWPOS_CENTERED为居中显示
2、创建渲染器
	SDL_Renderer *ren = SDL_CreateRenderer(win, -1,
			 SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
3、创建显示表面
	SDL_Surface *temp_Surface = SDL_LoadBMP("HelloWorld.bmp");	
4、//创建材质
SDL_Texture *tex = NULL;
tex = SDL_CreateTextureFromSurface(ren, temp_Surface);
5、显示画面
//清空渲染器
    SDL_RenderClear(ren);
    //将材质复制到渲染器
    SDL_RenderCopy(ren, tex, NULL, NULL);
    //呈现渲染器
    SDL_RenderPresent(ren);
6、退出时释放资源
	SDL_DestroyTexture(tex);
	SDL_FreeSurface(temp_Surface);
	SDL_DestroyRenderer(ren);
完整代码
#include<stdio.h>
#include<SDL2/SDL.h>
int main(int argc, char* argv[])//C语言完整格式
{
	
	if(SDL_Init(SDL_INIT_VIDEO) == -1){	//SDL_初始化
		printf("Could not initialize SDL!\n");
		return 0;
	}
	printf("SDL initialized.\n");
	
	//创建窗口
	SDL_Window *win = SDL_CreateWindow("Hello World!",
			 0, SDL_WINDOWPOS_CENTERED,
			 680, 300, SDL_WINDOW_SHOWN);
	//创建渲染器
	SDL_Renderer *ren = SDL_CreateRenderer(win, -1,
			 SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
	
	//创建表面
	SDL_Surface *temp_Surface = SDL_LoadBMP("HelloWorld.bmp");	
	
	if(win == NULL || ren == NULL || temp_Surface == NULL)
		printf("%s\n",SDL_GetError());
	
    //创建材质
    SDL_Texture *tex = NULL;
    tex = SDL_CreateTextureFromSurface(ren, temp_Surface);
    //清空渲染器
    SDL_RenderClear(ren);
    //将材质复制到渲染器
    SDL_RenderCopy(ren, tex, NULL, NULL);
    //呈现渲染器
    SDL_RenderPresent(ren);
	
	int quit = 0;//退出
	SDL_Event event;//监听退出活动
	
	while (!quit)
	{//主消息循环
		SDL_WaitEvent(&event);
		switch (event.type)
		{   
			//用户从菜单要求退出程序
			case SDL_QUIT:
				quit = 1;
				break;
		}
	}
	
	//清理资源
	SDL_DestroyTexture(tex);
	SDL_FreeSurface(temp_Surface);
	SDL_DestroyRenderer(ren);
	if(SDL_GetError())
		printf("%s\n",SDL_GetError());
	SDL_Quit();	//退出SDL调用
	
	return 0;
}

编译运行结果
gcc -o SdlTest.exe SdlTest.c -lmingw32 -lSDL2main -lSDL2
  • 在程序中添加了一个退出监听活动,点击标记的红色部分即可退出程序。

  • 注:这里显示的BMP格式的图片,因为SDL库原生支持BMP图片的显示,若想显示其他图片格式,需要添加一个"SDL_image.h"额外的库文件。

SDL显示PNG\JPG等格式的图片
  • 需要改动的地方就有三处:
  • 1、添加"SDL_image.h"头文件
  • 2、将temp_Surface的值赋值为IMG_Load(“HelloWorld.jpg”);
  • 3、在编译指令后添加-lSDL2_image
  • 另外在源文件目录下添加库文件,全文件目录如下:
整体代码如下
#include<stdio.h>
#include<SDL2/SDL.h>
#include <SDL2/SDL_image.h>

int main(int argc, char* argv[])//C语言完整格式
{
	
	if(SDL_Init(SDL_INIT_VIDEO) == -1){	//SDL_初始化
		printf("Could not initialize SDL!\n");
		return 0;
	}
	printf("SDL initialized.\n");
	
	//创建窗口
	SDL_Window *win = SDL_CreateWindow("Hello World!",
			 SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
			 680, 300, SDL_WINDOW_SHOWN);
	//创建渲染器
	SDL_Renderer *ren = SDL_CreateRenderer(win, -1,
			 SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
	
	//创建表面
	SDL_Surface *temp_Surface = IMG_Load("HelloWorld.jpg");	
	
	if(win == NULL || ren == NULL || temp_Surface == NULL)
		printf("%s\n",SDL_GetError());
	
    //创建材质
    SDL_Texture *tex = NULL;
    tex = SDL_CreateTextureFromSurface(ren, temp_Surface);
    //清空渲染器
    SDL_RenderClear(ren);
    //将材质复制到渲染器
    SDL_RenderCopy(ren, tex, NULL, NULL);
    //呈现渲染器
    SDL_RenderPresent(ren);
	
	int quit = 0;//退出
	SDL_Event event;//监听退出活动
	
	while (!quit)
	{//主消息循环
		SDL_WaitEvent(&event);
		switch (event.type)
		{   
			//用户从菜单要求退出程序
			case SDL_QUIT:
				quit = 1;
				break;
		}
	}
	
	//清理资源
	SDL_DestroyTexture(tex);
	SDL_FreeSurface(temp_Surface);
	SDL_DestroyRenderer(ren);
	if(SDL_GetError())
		printf("%s\n",SDL_GetError());
	SDL_Quit();	//退出SDL调用
	
	return 0;
}

  • 如果想要显示png图片,只要在代码中将图片文件的路径改为“*.png”即可。
编译运行
gcc -o SdlTest.exe SdlTest.c -lmingw32 -lSDL2main -lSDL2 -lSDL2_image
发布了34 篇原创文章 · 获赞 23 · 访问量 7632
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览