SDL 教程 02 : 在屏幕上贴一张图
2020-02-18 本文已影响0人
wjundong
示例代码
#include <SDL2/SDL.h>
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main(int argc, char const *argv[])
{
SDL_Window* window = NULL;
/** SDL_Surface 只是一种图像数据类型,它包含图像的像素以及渲染该图像所需的所有数据
* SDL_Surface 使用软件渲染,这意味着它使用CPU进行渲染。硬件渲染图像是可以的,但是有点困难
* 所以我们先用简单的方法来学习。在以后的教程中,我们将介绍如何渲染GPU加速图像 */
// 该图层结构用来获取窗口的 surface
SDL_Surface *screenSurface = NULL;
// 该图层结构用于加载和显示图片的
SDL_Surface *imageSurface = NULL;
// 初始化 SDL, 创建窗口
if(SDL_Init(SDL_INIT_VIDEO) < 0)
{
printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
exit(-1);
}
else
{
window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
if(window == NULL)
{
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
exit(-1);
}
else
{
screenSurface = SDL_GetWindowSurface( window );
}
}
// SDL_LoadBMP 会加载图片会自动创建一个图层
imageSurface = SDL_LoadBMP("hello_world.bmp");
if(imageSurface == NULL)
{
printf( "Unable to load image ! SDL Error: %s\n", SDL_GetError() );
}
else
{
/** SDL_BlitSurface 快速将一个位图块从一个地方传输到另一个地方
* SDL_BlitSurface 的第一个参数是源图层。第三个参数是目的图层
* 我们将在以后的教程中再讨论第二个和第四个参数 */
SDL_BlitSurface( imageSurface, NULL, screenSurface, NULL );
}
SDL_UpdateWindowSurface( window );
SDL_Delay( 2000 );
SDL_FreeSurface( imageSurface );
SDL_DestroyWindow( window );
SDL_Quit();
return 0;
}
运行结果
运行结果.png
注: 你可以将代码
imageSurface = SDL_LoadBMP("hello_world.bmp");
中图片地址改成自己测试的图片,注意图片格式必须是 bmp 格式的,要导入其他格式的图片后面会讲解,要用到 SDL_image 库