SDL第一个程序:加载一张图片
直接看代码吧
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
int flags = (Tao.Sdl.Sdl.SDL_INIT_VIDEO | Tao.Sdl.Sdl.SDL_INIT_TIMER |Tao.Sdl.Sdl.SDL_INIT_AUDIO);
IntPtr surfacePtr;
Tao.Sdl.Sdl.SDL_Rect rect;
int width = , height = ;
public Form1()
{
InitializeComponent();
int i = ;
i = Tao.Sdl.Sdl.SDL_Init(flags);
if (i != )
{
MessageBox.Show("SDL初始化失败!");
return;
}
Tao.Sdl.Sdl.SDL_WM_SetCaption("SDL", "MY 1ST SDL");
IntPtr icoptr = Tao.Sdl.Sdl.SDL_LoadBMP("E:\\2.bmp");
Tao.Sdl.Sdl.SDL_WM_SetIcon(icoptr, null);
surfacePtr = Tao.Sdl.Sdl.SDL_SetVideoMode(width, height, ,Tao.Sdl.Sdl.SDL_SWSURFACE | Tao.Sdl.Sdl.SDL_RESIZABLE);
rect = new Tao.Sdl.Sdl.SDL_Rect(, , (short)width, (short)height);
Tao.Sdl.Sdl.SDL_Rect rect2 = new Tao.Sdl.Sdl.SDL_Rect(, , (short)width, (short)height);
Tao.Sdl.Sdl.SDL_SetClipRect(surfacePtr, ref rect);
IntPtr bmpptr = Tao.Sdl.Sdl.SDL_LoadBMP("E:\\1.bmp");
Tao.Sdl.Sdl.SDL_BlitSurface(bmpptr, ref rect, surfacePtr, ref rect2);
Tao.Sdl.Sdl.SDL_Flip(surfacePtr);
Tao.Sdl.Sdl.SDL_UpdateRect(surfacePtr, , , rect.w, rect.h);
Tao.Sdl.Sdl.SDL_FreeSurface(bmpptr);
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Tao.Sdl.Sdl.SDL_FreeYUVOverlay(yuv);
Tao.Sdl.Sdl.SDL_FreeSurface(surfacePtr);
Tao.Sdl.Sdl.SDL_Quit();
}
}
}

SDL的初始化函数SDL_Init()。该函数可以确定希望激活的子系统。SDL_Init()函数原型如下:
public static int SDL_Init(int flags);
其中,flags可以取下列值:
SDL_INIT_TIMER:定时器
SDL_INIT_AUDIO:音频
SDL_INIT_VIDEO:视频
SDL_INIT_JOYSTICK:摇杆
SDL_INIT_HAPTIC:触摸屏
SDL_INIT_GAMECONTROLLER:游戏控制器
SDL_INIT_EVENTS:事件
SDL_INIT_NOPARACHUTE:不捕获关键信号(这个不理解)
SDL_INIT_EVERYTHING:包含上述所有选项
|
SDL各个子系统 |
||||
|
名称 |
常量 |
值 |
说明 |
自动初始化 |
|
定时器 |
SDL_INIT_TIMER |
0x00000001 |
初始化时间子系统 |
否 |
|
音频 |
SDL_INIT_AUDIO |
0x00000010 |
初始化音频子系统 |
否 |
|
视频 |
SDL_INIT_VIDEO |
0x00000020 |
初始化视频子系统 |
否 |
|
CDROM |
SDL_INIT_CDROM |
0x00000100 |
初始化CDROM子系统 |
否 |
|
游戏杆 |
SDL_INIT_JOYSTICK |
0x00000200 |
初始化JOYSTICK子系统 |
否 |
|
错误捕获 |
SDL_INIT_NOPARACHUTE |
0x00100000 |
避免捕获致命错误 |
是 |
|
线程 |
SDL_INIT_EVENTTHREAD |
0x01000000 |
初始化线程子系统 |
是 |
|
全部子系统 |
SDL_INIT_EVERYTHING |
0x0000FFFF |
初始化上述所有子系统 |
否 |
SDL各个子系统
名称 常量 值 说明 自动初始化
定时器 SDL_INIT_TIMER 0x00000001 初始化时间子系统 否
音频 SDL_INIT_AUDIO 0x00000010 初始化音频子系统 否
视频 SDL_INIT_VIDEO 0x00000020 初始化视频子系统 否
CDROM SDL_INIT_CDROM 0x00000100 初始化CDROM子系统 否
游戏杆 SDL_INIT_JOYSTICK 0x00000200 初始化JOYSTICK子系统 否
错误捕获 SDL_INIT_NOPARACHUTE 0x00100000 避免捕获致命错误 是
线程 SDL_INIT_EVENTTHREAD 0x01000000 初始化线程子系统 是
全部子系统 SDL_INIT_EVERYTHING 0x0000FFFF 初始化上述所有子系统 否
返回值:
-1 On error
0 On success
采用 SDL_SetVideoMode()来初始化屏幕。这个屏幕是特指SDL绘制的窗口,并不是指整个屏幕。
public extern static IntPtr SDL_SetVideoMode(int width, int height, int bpp, int flags);
width,height是输出高和宽,bitsperpixel 就是指bpp.即每点像素数,取值 8,16,32,值越大,说明屏幕表现力越丰富。它取决于显示器或LCD的硬件性能。一般桌面显示器是32.嵌入式设备的bpp可以用fbset 命令来查看。
flags 常见取值有如下(可以取多个值)
SDL_SWSURFACE :数据区建立在系统内存之上
SDL_HWSURFACE:数据区建立在显存之上
SDL_FULLSCREEN:全屏模式
SDL_NOFRAME:取消边框和标题栏
SDL_DOUBLEBUF:硬件双缓冲,必须与SDL_HWSURFACE同时使用。
把一个Surface数据拷入屏幕
public extern static int SDL_BlitSurface(IntPtr src, ref Sdl.SDL_Rect srcrect, IntPtr dst, refSdl.SDL_Rect dstrect);
这里dst是输出surface(不一定是屏幕Surface,也可以另外一个Surface).
dstrect是src在dst中相应的位置.
刷新屏幕
public extern static int SDL_Flip(IntPtr screen);
把更新后的Surface数据显示在屏幕上,SDL_BlitSurface数据加入屏幕后,不执行这一句,将不会更新到屏幕上显示。
部分更新屏幕
如果每次都更新整个屏幕,效率这样很低,可以用SDL_UpdateRect更新部分区域
public extern static void SDL_UpdateRect(IntPtr screen, int x, int y, int w, int h);
设置窗口图标
public extern static void SDL_WM_SetIcon(IntPtr icon, byte[] mask);
设置窗口标题
public extern static void SDL_WM_SetCaption(string title, string icon);
title 是窗口标题名字,如果是中文,必须是UTF-8编码。
icon 是窗口最小化采用显示文字。也采用UTF-8编码
SDL第一个程序:加载一张图片的更多相关文章
- Android Bitmap 全面解析(二)加载多张图片的缓存处理
一般少量图片是很少出现OOM异常的,除非单张图片过~大~ 那么就可以用教程一里面的方法了通常应用场景是listview列表加载多张图片,为了提高效率一般要缓存一部分图片,这样方便再次查看时能快速显示~ ...
- 32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数
32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首 ...
- ELF程序头部及程序加载
程序头部 程序头部描述与程序执行直接相关的目标文件结构信息.用来在文件中定位各个段的映像.同时包含其他一些用来为程序创建进程映像所必需的信息. 可执行文件或者共享目标文件的程序头部是一个结构数组,每个 ...
- 关于Windows平台下应用程序加载DLL模块的问题.
本文将讨论以下问题: (1)Windows可执行程序会从哪些目录下加载DLL. (2)如何将可执行使用的DLL放置到统一的目录下,而不是与EXE同一目录. (3)可执行程序加载了不该加载的DLL. ( ...
- 无法为具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“MySql.Data.MySqlClient.MySqlProviderServices,MySql.Data.Entity.EF6”
"System.InvalidOperationException"类型的未经处理的异常在 mscorlib.dll 中发生 其他信息: 无法为具有固定名称"MySql. ...
- 无法为具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer”。请确保使用限定程序集的名称且该程序集对运行的应用程序可用。有关详细信息,请参阅 http://go.m
Windows服务中程序发布之后会如下错误: 无法为具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“Syste ...
- 刚部署的程序加载不出来css,js以及图片
刚部署的程序加载不出来css,js以及图片,解决方式 需要在配置中加入静态资源 方法一: controller.xml中加入 <mvc:annotation-driven/> <mv ...
- 使用SplashScreenManager控件定制程序加载页面
需要devexpress版本在12.0及以上才支持 https://www.cnblogs.com/wuhuacong/p/6112461.html 在DevExpress程序中使用SplashScr ...
- cordova程序加载pdf文件的2种方法(ios/android)
前言 公司目前的前端架构是微信端由vue全家桶负责h5网站的单页应用,android端和ios端则选择cordova打包成apk和app.其中,有一个业务逻辑是点击某个链接进入pdf的展示,h5的方案 ...
- .js控制一次加载一张图片,加载完后再加载下一张
js怎么控制一次加载一张图片,加载完后再加载下一张 (1)方法1 (1)方法2
随机推荐
- Topshelf 创建windows服务注意事项
其中项目应该是控制台应用程序 test.exe需要赋与管理员权限,右键属性可以定义. test.exe install test.exe unstall
- SQLSERVER自动定时(手动)备份工具
最近项目需要,写了一个小工具软件: 1.实时显示监控 2.可多选择备份数据库 3.按每天定时备份 4.备份文件自动压缩 5.删除之前备份文件 直接上图 1.备份监控界面: 2.数据库设置: 附工具下载 ...
- 005.nginx配置文件
1.替换nginx主配置文件 通过前面的配置,LNMP的环境已经搭建完成,现在我们替换nginx配置文件: [root@huh ~]# cd /usr/local/nginx/conf/[root@h ...
- Ubuntu14-04 MySQL-5.6.21通用二进制安装
#卸载mysql /etc/init.d/mysqld stop &> /dev/null killall mysqld &> /dev/null sudo rm -rf ...
- 整理几篇比较好的AndroidUI动画开发文章
第一篇,写的比较详细,新手可以看得懂: http://www.360doc.com/content/16/0128/08/30422106_531162539.shtml
- FineReport中hadoop,hive数据库连接解决方案
1. 描述 Hadoop是个很流行的分布式计算解决方案,Hive是基于hadoop的数据分析工具.一般来说我们对Hive的操作都是通过cli来进行,也就是Linux的控制台,但是,这样做本质上是每个连 ...
- 区块链是伟大的,比特币则不然。《FinTech,金融科技时代的来临》。3星。
本书讲技术给金融业带来的变革和可能的趋势.作者认为区块链是伟大的发明,因为他可以让金融交易免费且实时地进行.比特币则可能会被其他区块链技术取代.书中有至少一半的内容涉及到了区块链和比特币.总体评价3星 ...
- java设计模式之组合模式
组合模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 & ...
- UVA11478 Halum [差分约束系统]
https://vjudge.net/problem/UVA-11478 给定一个有向图,每条边都有一个权值.每次你可以选择一个结点v和一个整数d,把所有以v为终点的边的权值减小d,把所有以v为起点的 ...
- 前端之css
前端之css 本节内容 css概述及引入 css选择器 css常用属性 1.css概述及引入 CSS概述 CSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数 ...