SDL基础使用03(渲染显示bmp图片)

简介: 如何使用SDL库在C++中创建窗口、加载BMP图片、创建纹理,并通过渲染器进行显示的完整过程。

基于渲染器 显示bmp图片

    1. 初始化SDL SDL_Init
    1. 创建窗口 SDL_CreateWindow
    1. 基于窗口创建渲染器 SDL_CreateRenderer
    1. 加载bmp图片到surface SDL_LoadBMP
    1. 根据图片surface创建纹理 SDL_CreateTextureFromSurface
    1. 绘制三部曲

    清空渲染器上一次显示 SDL_RenderClear
    拷贝纹理数据到渲染器 SDL_RenderCopy
    更新渲染器显示 SDL_RenderPresent

    1. 释放资源,退出 SDL_FreeSurface......
#include <iostream>
/* 纹理和渲染(渲染显示bmp图片) */
extern "C"
{
#include <SDL.h>
}

#pragma comment(lib, "SDL2.lib")


#undef main
int main()
{
    // 1. 初始化
    int nRet = SDL_Init(SDL_INIT_EVERYTHING);
    if (nRet < 0)
    {
        std::cout << "SDL Error: " << SDL_GetError() << std::endl;
        return -1;
    }

    // 2. 创建窗口
    SDL_Window* pWnd = SDL_CreateWindow("Title",
        SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
        640, 480,
        SDL_WINDOW_SHOWN);
    if (NULL == pWnd)
    {
        std::cout << "SDL Error: " << SDL_GetError() << std::endl;
        return -1;
    }

    // 3. 创建渲染        SDL_RENDERER_ACCELERATED   GPU硬件加速渲染
    SDL_Renderer* pRenderer = SDL_CreateRenderer(pWnd, -1, SDL_RENDERER_ACCELERATED); 
    if (NULL == pRenderer)
    {
        SDL_DestroyWindow(pWnd);
        std::cout << "SDL Error: " << SDL_GetError() << std::endl;
        return -1;
    }

    // 4. 加载bmp图片到surface
    SDL_Surface* pSurface = SDL_LoadBMP("./Panda.bmp");        // 加载bmp图片
    if (NULL == pSurface)
    {
        SDL_DestroyRenderer(pRenderer);
        SDL_DestroyWindow(pWnd);
        std::cout << "SDL Error: " << SDL_GetError() << std::endl;
        return -1;
    }

    SDL_Rect rect = { 0, 0, pSurface->w - 50, pSurface->h + 50 };
    // 5. 根据Surface创建纹理
    SDL_Texture*  pTexture = SDL_CreateTextureFromSurface(pRenderer, pSurface);
    if (NULL == pTexture)
    {
        SDL_FreeSurface(pSurface);
        SDL_DestroyRenderer(pRenderer);
        SDL_DestroyWindow(pWnd);
        std::cout << "SDL Error: " << SDL_GetError() << std::endl;
        return -1;
    }

    // 6. 绘制三部曲
    SDL_RenderClear(pRenderer);                                // 清空一下渲染器(防止有残留的数据)                            
    SDL_RenderCopy(pRenderer, pTexture, &rect, &rect);        // 将纹理数据拷贝到渲染器缓冲区中
    SDL_RenderPresent(pRenderer);                            // 刷新渲染器显示

    SDL_Delay(2000);

    // 7. 释放资源,退出
    // 释放表面
    if (pSurface)
    {
        SDL_FreeSurface(pSurface);
    }
    // 释放纹理
    if (pTexture)
    {
        SDL_DestroyTexture(pTexture);
    }
    // 释放渲染
    if (pRenderer)
    {
        SDL_DestroyRenderer(pRenderer);
    }
    // 释放窗口
    if (pWnd)
    {
        SDL_DestroyWindow(pWnd);
    }
    SDL_Quit();

    return 0;
}
相关文章
[笔记]音视频学习之SDL篇《五》裁剪图片成子图片(裁剪精灵表)
[笔记]音视频学习之SDL篇《五》裁剪图片成子图片(裁剪精灵表)
|
3天前
|
C++
SDL基础使用02(加载bmp图片、纹理和渲染)
这篇文章介绍了如何使用SDL库在C++中加载和显示BMP图片,以及如何使用纹理和渲染器进行更高级的图形处理。
9 2
|
3天前
|
Windows
SDL基础使用07(YUV数据显示)
使用SDL库在Windows上处理和显示YUV数据,包括生成随机YUV数据、播放YUV文件以及实现带缩放的实时渲染。
13 1
|
编解码 前端开发 搜索推荐
Python3.7将普通图片(png)转换为SVG图片格式并且让你的网站Logo(图标)从此”动”起来
在之前的几篇文章中,介绍了业界中比较火爆的图片技术SVG(Scalable Vector Graphics),比如[Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript来打造属于自己的个性化社交分享系统](https://v3u.cn/a_id_143),我们可以使用svg来打造精美炫酷的分享小图标(icon),这一次我们使用python来将普通的静态的网站logo图片转换为带路径(path)的svg图片,这样就可以让网站logo能够变成动态的,作为一名不折腾不舒服斯基,一枚炫酷自带动画的网站logo自然能够满足我们的折腾欲,同时亦能击中我们的虚荣心。
Python3.7将普通图片(png)转换为SVG图片格式并且让你的网站Logo(图标)从此”动”起来
VC中GDI+双缓冲实现Picture控件中显示png图片
VC中GDI+双缓冲实现Picture控件中显示png图片
221 0
|
开发工具 Windows
SDL开发笔记(三):使用SDL渲染窗口颜色和图片
SDL开发笔记(三):使用SDL渲染窗口颜色和图片
SDL开发笔记(三):使用SDL渲染窗口颜色和图片
|
Android开发 JavaScript
【音视频连载-004】基础学习篇-SDL 加载图片并显示
在前面的文章中已经介绍完 SDL 显示窗口、消息循环和事件响应这些基础内容,有了这些基础就可以进行功能性开发了。 本篇的主要内容是利用 SDL 加载并显示一张图片,然后再去进行更多的音视频操作。
224 0
【音视频连载-004】基础学习篇-SDL 加载图片并显示
|
C语言 Android开发
【音视频连载-005】基础学习篇-SDL 加载 YUV 文件并显示
在前面的文章中已经完成了图片的加载和显示,接下来要做的就是加载 YUV 文件并显示
348 0
【音视频连载-005】基础学习篇-SDL 加载 YUV 文件并显示
|
存储 C#
[开源]基于WPF实现的Gif图片分割器,提取GIf图片中的每一帧
原文:[开源]基于WPF实现的Gif图片分割器,提取GIf图片中的每一帧   不知不觉又半个月没有更新博客了,今天终于抽出点时间,来分享一下前段时间的成果。   在网上,我们经常看到各种各样的图片,尤其是GIF图片的动态效果,让整个网站更加富有表现力!有时候,我们看到一些比较好看的GIF图片或者一些奇特的Gif图片,我们想要停留在某一帧看的清楚一点或者了解这个Gif动画到底是怎么实现的,怀着这种好奇的心理,我们来看一下,今天的开源项目,用WPF来实现GIF图片的预览和分离和保存。
1180 0
|
定位技术
openlayers加载图片图层png,jpeg等
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gisdoer/article/details/80479536 原文:http://www.
1502 0