文档章节

SDL编程二(视频)

来来叔叔
 来来叔叔
发布于 2017/08/04 23:56
字数 431
阅读 1
收藏 0
 

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);
}
}

该示例没有消息处理,只是循环地显示一幅图像,不能与用户进行交互。


© 著作权归作者所有

共有 人打赏支持
下一篇: 三角形填充
来来叔叔
粉丝 0
博文 100
码字总数 55732
作品 0
广州
高级程序员
私信 提问
《基于 FFmpeg + SDL 的视频播放器的制作》课程的视频

这两天开始带广播电视工程大二的暑假小学期的课程设计了。本次小学期课程内容为《基于 FFmpeg + SDL 的视频播放器的制作》,其中主要讲述了视音频开发的入门知识。由于感觉本课程的内容不但适...

leixiaohua1020
2015/07/26
0
0
SDL系列讲解(十一) SDL_QUIT流程

明天会将自己的很早的一部小说发出,一次发出写的所有的六章,如果时间,或者某天突然觉得可以续写了,那么就是它又一次起航了。 工作期间,码了一个记录工作的小说,有兴趣的可以阅读。当然...

代码GG陆晓明
2017/10/28
0
0
SDL2源代码分析8:视频显示总结

===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDLInit()) SDL2源代码分析2:窗口(SDLWindow) SDL2源代码分析3:渲染器...

leixiaohua1020
2014/11/18
0
0
SDL2源代码分析2:窗口(SDL_Window)

===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDLInit()) SDL2源代码分析2:窗口(SDLWindow) SDL2源代码分析3:渲染器...

leixiaohua1020
2014/11/03
0
0
SDL2源代码分析1:初始化(SDL_Init())

===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDLInit()) SDL2源代码分析2:窗口(SDLWindow) SDL2源代码分析3:渲染器...

leixiaohua1020
2014/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

小白创建一个spring boot项目

进入 https://start.spring.io/

lilugirl
48分钟前
0
0
Alibaba Java诊断利器Arthas实践--使用redefine排查应用奇怪的日志来源

背景 随着应用越来越复杂,依赖越来越多,日志系统越来越混乱,有时会出现一些奇怪的日志,比如: [] [] [] No credential found 那么怎样排查这些奇怪的日志从哪里打印出来的呢?因为搞不清...

hengyunabc
今天
1
0
home hosts

home hosts lwk@qwfys:~$ cat /etc/hosts127.0.0.1 localhost127.0.1.1 qwfys192.168.56.101vm600.qwfys.com39.108.212.91alpha1.ppy.com39.108.117.122alpha2.p......

qwfys
今天
1
0
大数据教程(6.1)hadoop生态圈介绍及就业前景

1. HADOOP背景介绍 1.1、什么是HADOOP 1.HADOOP是apache旗下的一套开源软件平台 2.HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理 3.HADOOP的核心组...

em_aaron
今天
4
0
hadoop垃圾回收站

在生产生,hdfs回收站必须是开启的,一般设置为7天。 fs.trash.interval 为垃圾回收站保留时间,如果为0则禁用回收站功能。 fs.trash.checkpoint.interval 回收站检查点时间,一般设置为小于...

hnairdb
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部