SDL教程-001.创建窗体& 显示bmp图片

SDL教程-创建窗体& 显示bmp图片

note1. hello,world

#include <iostream>
#include <SDL.h>

int main(int argc, char* argv[])
{
	if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
		return(1);
	SDL_Delay(2000);
	SDL_Quit();

	return 0;
}

note2. sdl 展示一张bmp图片

#include <iostream>
#include <SDL.h>
int main(int argc, char* argv[])
{
	if (SDL_Init(SDL_INIT_VIDEO))
	{
		std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
		return 1;
	}
	SDL_Window *win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
	if (win == nullptr)
	{
		std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
		return 1;
	}
	SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
	if (ren == nullptr)
	{
		SDL_DestroyWindow(win);
		std::cout << "SDL_CreateRender Error: " << SDL_GetError() << std::endl;
		SDL_Quit();
		return 1;
	}
	std::string imagePath = "G:\\code\\AudioDemo\\Res\\bmps\\childrensday.bmp";
	SDL_Surface *bmp = SDL_LoadBMP(imagePath.c_str());
	if (bmp == nullptr)
	{
		SDL_DestroyRenderer(ren);
		SDL_DestroyWindow(win);
		std::cout << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl;
		SDL_Quit();
		return 1;
	}
	SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp);
	SDL_FreeSurface(bmp);
	if (tex == nullptr)
	{
		SDL_DestroyRenderer(ren);
		SDL_DestroyWindow(win);
		std::cout << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl;
		SDL_Quit();
		return 1;
	}
	for (int i = 0; i < 3; ++i)
	{
		SDL_RenderClear(ren);
		SDL_RenderCopy(ren, tex, NULL, NULL);
		SDL_RenderPresent(ren);
		SDL_Delay(10000);
	}

	SDL_DestroyTexture(tex);
	SDL_DestroyRenderer(ren);
	SDL_DestroyWindow(win);
	SDL_Quit();
	return 0;
}

默认SDL2 支持BMP格式图片的加载,示例如上代码,接下来,介绍的是SDL加载其他格式的图片jpeg,png,webp…格式
依赖新的库:SDL_image

https://www.libsdl.org/projects/SDL_image/
下载对应平台的SDL_Image库,我是win平台vs2013开发,所以下载是SDL2_image-devel-2.0.5-VC.zip (Visual C++ 32/64-bit)这个。

与加载BMP方式唯一的不同是改了如下加载函数即可。

	std::string imagePath = "G:\\code\\AudioDemo\\Res\\jpgs\\015.jpg";
	SDL_Surface *bmp = IMG_Load(imagePath.c_str());

完整代码如下:

#include <iostream>
#include <SDL.h>
#include <SDL_image.h>
int main(int argc, char* argv[])
{
	if (SDL_Init(SDL_INIT_VIDEO))
	{
		std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
		return 1;
	}
	SDL_Window *win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
	if (win == nullptr)
	{
		std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
		return 1;
	}
	SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
	if (ren == nullptr)
	{
		SDL_DestroyWindow(win);
		std::cout << "SDL_CreateRender Error: " << SDL_GetError() << std::endl;
		SDL_Quit();
		return 1;
	}
	//std::string imagePath = "G:\\code\\AudioDemo\\Res\\bmps\\childrensday.bmp";
	//SDL_Surface *bmp = SDL_LoadBMP(imagePath.c_str());

	std::string imagePath = "G:\\code\\AudioDemo\\Res\\jpgs\\015.jpg";
	SDL_Surface *bmp = IMG_Load(imagePath.c_str());
	if (bmp == nullptr)
	{
		SDL_DestroyRenderer(ren);
		SDL_DestroyWindow(win);
		std::cout << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl;
		SDL_Quit();
		return 1;
	}
	SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp);
	SDL_FreeSurface(bmp);
	if (tex == nullptr)
	{
		SDL_DestroyRenderer(ren);
		SDL_DestroyWindow(win);
		std::cout << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl;
		SDL_Quit();
		return 1;
	}
	for (int i = 0; i < 3; ++i)
	{
		SDL_RenderClear(ren);
		SDL_RenderCopy(ren, tex, NULL, NULL);
		SDL_RenderPresent(ren);
		SDL_Delay(10000);
	}

	SDL_DestroyTexture(tex);
	SDL_DestroyRenderer(ren);
	SDL_DestroyWindow(win);
	SDL_Quit();
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: sdl2-2.0.12.tar.gz 是一种压缩文件格式,通常用于将软件、库或者其他文件打包和传输。这个文件的后缀 ".tar.gz" 表示它是一个经过 tar 和 gzip 压缩的文件。 要下载 sdl2-2.0.12.tar.gz 文件,您可以按照以下步骤进行操作: 1. 打开您的网络浏览器,进入您常用的搜索引擎网站,例如 Google 或者百度。 2. 在搜索框中输入 "sdl2-2.0.12.tar.gz 下载",并点击搜索按钮。 3. 在搜索结果中,您可能会看到来自不同网站的下载链接,请选择您信任的网站。 4. 点击下载链接,浏览器将开始下载 sdl2-2.0.12.tar.gz 文件。 5. 下载完成后,您可以在浏览器的默认下载文件夹中找到该文件。您还可以选择将其移动到您希望存储的位置,例如桌面或者其他文件夹。 6. 解压缩下载的 sdl2-2.0.12.tar.gz 文件。在大多数操作系统中,您可以右键点击该文件,然后选择相应的解压选项。解压后,您将得到一个文件夹,其中包含 sdl2-2.0.12 版本的相关文件。 7. 现在,您可以根据您的需求使用这些文件,例如编译和安装该软件、库或者进行其他操作。 请注意,下载 sdl2-2.0.12.tar.gz 文件需要一个可用的网络连接,并且需要注意从可信赖的网站下载,以确保文件的安全性。 ### 回答2: SDL2-2.0.12.tar.gz是Simple DirectMedia Layer 2(简称SDL2)的软件开发包。SDL2是一种跨平台的多媒体库,可以用于开发游戏、多媒体应用程序和图形用户界面等。在SDL2的官方网站(https://www.libsdl.org/)可以找到该软件包的下载链接。 要下载SDL2-2.0.12.tar.gz文件,可以按照以下步骤进行: 1. 首先,打开SDL2的官方网站,进入下载页面。 2. 在下载页面,找到SDL2-2.0.12版本的下载链接。一般会有多个下载方式,例如通过HTTP或FTP下载,可以根据自己的需求选择适合自己的方式下载。 3. 点击下载链接后,会开始下载SDL2-2.0.12.tar.gz压缩文件。等待下载完成。 4. 下载完成后,可以在下载目录中找到SDL2-2.0.12.tar.gz文件。 5. 将该压缩文件解压缩到指定的目录中,可以使用解压缩软件(如WinRAR或7-Zip)进行解压操作。 6. 解压完成后,在目录中可以找到SDL2-2.0.12文件夹,其中包含了SDL2的源代码和相关文件。 7. 接下来,可以根据需要进行编译安装操作,具体步骤可以参考SDL2的官方文档或README文件。 总结:通过以上步骤,你可以成功下载SDL2-2.0.12.tar.gz文件,并在本地进行后续的编译安装操作。 ### 回答3: sdl2-2.0.12.tar.gz 是一个文件的压缩包,通常用于在Linux系统中安装SDL2库。在下载这个文件之前,您需要确认您的系统是否支持SDL2库,并且已经安装了相关的依赖。 您可以在SDL官方网站(https://www.libsdl.org/download-2.0.php)上找到该文件的下载链接。点击链接后,浏览器会开始下载这个压缩包。 下载完毕后,您可以将该文件保存到您想要的位置,比如主目录下的Downloads文件夹中。 接下来,您需要解压这个压缩包。您可以通过命令行来解压,使用以下命令: tar -zxvf sdl2-2.0.12.tar.gz 解压完成后,您可以进入解压得到的文件夹: cd sdl2-2.0.12 在这个文件夹中,您可以执行一系列的配置、编译和安装命令来安装SDL2库。具体的安装步骤可以在解压得到的文件夹中的README文件中找到,它会提供给您所需的详尽说明。 请注意,安装过程中可能需要root权限,因此您可以在安装命令前加上sudo。安装完成后,您可以通过编译和运行一个简单的SDL2程序来测试您的安装是否成功。 希望以上信息对您有所帮助,祝您安装成功!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值