SDL学习二:显示一张图片

需要一张bmp格式的图片,百度有网站可以在线转换

#include <stdio.h>
#include <SDL2/SDL.h>

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

int main()
{

    SDL_Window* Window = NULL;

    SDL_Surface* screenSurface = NULL;
 
    //图片也需要这样一个指针
    SDL_Surface* picture = NULL;
 
    //首先初始化   初始化SD视频子系统
    if(SDL_Init(SDL_INIT_VIDEO)<0)
    {
        printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
        return -1;
    }
    //创建窗口
    Window=SDL_CreateWindow("SHOW BMP",//窗口标题
                            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() );
        return -1;
    }
   
    //获取窗口对应的surface
    screenSurface=SDL_GetWindowSurface(Window);
 
    //加载图片
    picture = SDL_LoadBMP("./sdl.bmp");
    if( picture == NULL )
    {
        printf( "Unable to load image %s! SDL Error: %s\n", "Hello_World.bmp", SDL_GetError() );
        return -1;
    }
    
    //将图片复制到窗口上,API查阅官方文档,上篇文章末尾有链接
    SDL_BlitSurface( picture ,  NULL ,  screenSurface , NULL);
    
	//更新窗口
    SDL_UpdateWindowSurface(Window);
    SDL_Delay(2000);//延时2000毫秒
 
    //释放内存
    SDL_FreeSurface( picture );
    picture = NULL;
 
    SDL_DestroyWindow(Window);
    Window = NULL ;
 
    SDL_Quit();//退出SDL
 
    return 0;
}

复制:int SDL_BlitSurface(SDL_Surface* src, const SDL_Rect* srcrect,SDL_Surface* dst, SDL_Rect* dstrect)
第一个和第三个参数表示源和目标的surface指针
第四个参数是一个SDL_Rect结构体,表示对象(一幅图片或者一帧画面),可以改变显示的位置,他有四个属性
int x :表示顶点位置的x坐标(显示框左上角为原点)
int y :表示顶点位置的y坐标(显示框左上角为原点)
int w :表示宽度
int h : 表示长度
第四个参数跟第三个一样,但表示分割,即从图片指定的坐标开始显示,此时原点是图片的左上角而不是显示框的左上角,整张图片现实的位置还是在显示框的左上角。

两个参数为NULL的时候:
在这里插入图片描述
第四个参数为结构体,并给x,y属性赋值,第三个为NULL,效果图:
在这里插入图片描述
第三个参数为结构体,并给x,y属性赋值,第四个为NULL,效果图:
在这里插入图片描述
两个参数都为结构体,效果图:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值