1.初始SDL视频库
if (SDL_Init(SDL_INIT_VIDEO)<0)
{
printf("can not init SDL.\n");
exit(1);
}
2.屏幕像素的操作
下面的函数是在屏幕的(x,y)坐标位置,绘制一个颜色为R,G,B的像素点。
void DrawPixel(SDL_Surface *screen, int x, int y, Uint8 R, Uint8 G, Uint8 B)
{
Uint32 color = SDL_MapRGB(screen->format, R, G, B);
if (SDL_MUSTLOCK(screen))//锁屏幕数据
{
if (SDL_LockSurface(screen) < 0)
{
return;
}
}
switch (screen->format->BytesPerPixel)//屏幕像素颜色的位深
{
case 1:
{
Uint8 *bufp;
bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
*bufp = color;
}
break;
case 2:
{
Uint16 *bufp;
bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x;
*bufp = color;
}
break;
case 3:
{
Uint8 *bufp;
bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
*(bufp+screen->format->Rshift/8) = R;
*(bufp+screen->format->Gshift/8) = G;
*(bufp+screen->format->Bshift/8) = B;
}
break;
case 4:
{
Uint32 *bufp;
bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x;
*bufp = color;
}
break;
}
if (SDL_MUSTLOCK(screen))//操作之后对屏幕数据“开锁”
{
SDL_UnlockSurface(screen);
}
SDL_UpdateRect(screen, x, y, 1, 1);
}
3.显示bmp图像
SDL只提供了加载bmp图像的函数SDL_LoadBMP,但通过其它SDL扩展库也可以操作JPG、PNG等其它格式的图片。
void ShowBMP(char *file, SDL_Surface *screen, int x, int y)
{
SDL_Surface *image;
SDL_Rect dest;
image = SDL_LoadBMP(file);//加载位图图像文件
if (image == NULL)
{
printf("cannot load %s: %s\n", file, SDL_GetError());
return;
}
dest.x = x;//设置显示的位置及大小
dest.y = y;
dest.w = image->w;
dest.h = image->h;
SDL_BlitSurface(image, NULL, screen, &dest);//绘制图像
SDL_UpdateRects(screen, 1, &dest);//更新屏幕
SDL_FreeSurface(image);
}
显示位图示例:
#include <stdlib.h>
#include <stdio.h>
#include "SDL.h"
int main(int argc, char *argv[])
{
if (SDL_Init(SDL_INIT_VIDEO)<0)//初始化SDL视频库
{
printf("can not init SDL.\n");
exit(1);
}
printf("successful init SDL.\n");
SDL_Surface *screen;
screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);//创建窗口
if (screen == NULL)
return;
while(1)
{
ShowBMP("apple.bmp", screen, 0, 0);//显示位图
SDL_Delay(100);
}
}
该示例没有消息处理,只是循环地显示一幅图像,不能与用户进行交互。
分享到:
相关推荐
使用sdl2实现对于YUV420P视频进行播放,并且通过SDL2的多线程实现窗口可大可小变化 有利于初学者学习sdl编程
详细地描述了ffmpeg解码技术和SDL的显示技术,以及二者混合编程的方法,对于使用Linux或嵌入式多媒体编程人员有很大的借鉴意义!
【FFmpeg编程实战】(4)实现FFmpeg4.3 + SDL2视频播放器(音频+视频播放)(C++) https://ciellee.blog.csdn.net/article/details/109034360
sdl编程指南,各种元素显示指南。简单易学。。。。。。
SDL是一个跨平台的多媒体库,它通过OpenGL和2D视频帧缓冲,提供了针对音频、视频、键盘、鼠标、控制杆及3D硬件的低级别的访问接口。它在MPEG播放软件、模拟器以及许多游戏中得到广泛的应用,其中包含了获得大奖的...
《【FFmpeg编程实战】(3)实现FFmpeg4.3 + SDL2视频播放器(只播放视频)(C++)》 https://ciellee.blog.csdn.net/article/details/108990754
关键点有二:其一,从video4linux2的编程接口笔者了解到其笔记本摄像头支持YUYV视频帧格式,显示在 SDL上需要将YUYV格式转换成SDL支持的显示格式RGB。 其二,要学会使用video4linux2获得摄像头YUYV数据流的程序框架...
雷神(雷霄桦)在FFmpeg + SDL 的视频播放器的代码中清晰地展示了作为一个播放器代码的思路。非常适合初学者学习借鉴。 雷神在“广播电视工程大二的暑假小学期的课程设计”中,课程内容为《基于 FFmpeg + SDL 的视频...
从零开始学习音视频编程技术(二十二) FFMPEG Qt视频播放器之BUG修复 Qt的版本是5.6.2(vs2013) FFMPEG的版本是2.5.2 SDL的版本是2.04 更新日志: 【V1.8.0】2019-03-22 1.代码结构调整(将底层播放器和Qt界面...
在学习如何编写自己的播放器时,一定会用到SDL,SDL主要用于播放视频。 SDL即Simple DirectMedia Layer,类似DirectX,是完整的游戏、多媒体开发包,但不 同的是它跨越几乎所有的平台,有各种语言的接口,多种语言的...
【FFmpeg编程实战】(4)实现FFmpeg4.3 + SDL2视频播放器(音频+视频播放)(C++) https://ciellee.blog.csdn.net/article/details/109034360
从零开始学习音视频编程技术(二十二) FFMPEG Qt视频播放器之BUG修复(升级到ffmpeg4.1) Qt的版本是5.6.2(vs2013) FFMPEG的版本是4.1 SDL的版本是2.04
简易多媒体编程层,同时支持Visual C++和MinGW进行开发
这是Qt的工程,建议使用Qt Creator 打开...从零开始学习音视频编程技术(41) H.264播放器 FFMPEG的版本是2.5.2 SDL的版本是2.04 记得将ffmpeg/bin目录下的dll文件拷贝到编译生成的exe所在的目录下,否则会无法运行。
从零开始学习音视频编程技术(九) FFMPEG Qt视频播放器之同步进阶篇 FFMPEG的版本是2.5.2 SDL的版本是2.04 记得将ffmpeg/bin目录下的dll文件拷贝到编译生成的exe所在的目录下,否则会无法运行。 关于代码的解释...