文档章节

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
广州
高级程序员
私信 提问
SDL2源代码分析8:视频显示总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/41207787 ===================================================== SDL源代码......

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/40701203 ===================================================== SDL源代码......

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/40680907 ===================================================== SDL源代码......

雷霄骅
2014/11/01
0
0
《基于 FFmpeg + SDL 的视频播放器的制作》课程的视频

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/47068015 这两天开始带广播电视工程大二的暑假小学期的课程设计了。本次小学...

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

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

代码GG陆晓明
2017/10/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
3
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
6
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
7
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
5
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部