??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久无码精品亚洲日韩软件,久久艹国产,久久精品国产AV一区二区三区http://m.shnenglu.com/cokecoffe/category/17381.htmlzh-cnSat, 02 Jun 2012 23:20:33 GMTSat, 02 Jun 2012 23:20:33 GMT60Subversion基础Q概c安装、配|和基本操作(转)http://m.shnenglu.com/cokecoffe/archive/2012/06/01/177030.htmlWangkekeWangkekeFri, 01 Jun 2012 02:25:00 GMThttp://m.shnenglu.com/cokecoffe/archive/2012/06/01/177030.htmlhttp://m.shnenglu.com/cokecoffe/comments/177030.htmlhttp://m.shnenglu.com/cokecoffe/archive/2012/06/01/177030.html#Feedback0http://m.shnenglu.com/cokecoffe/comments/commentRss/177030.htmlhttp://m.shnenglu.com/cokecoffe/services/trackbacks/177030.html

转自:http://www.uml.org.cn/pzgl/200902137.asp
摘要Q介l了 Subversion 的基本概c详l讲解了在Windows下如何安?SubversionQ如何配|一个基本的Subversion 服务?/a>?p> 

目录

一、基本概?/p>

1、什么是版本控制

2、什么是 Subversion

3、版本库(repository)

二、安?/p>

1、准备工?/p>

2、安?a title="服务? target="_blank" style="text-decoration: none; color: #000000; cursor: pointer; ">服务?/a>端和客户?/p>

3、徏立版本库(Repository)

4、运行独立服务器

三、基本配|?/p>

1、配|用户和权限

2、初始化导入

四、基本操作流E?/p>

1、取?check out)

2、存?check in)/提交(commit)

------------------------------------------------------------------??U?--------------------------------------------------------------

一、基本概?/strong>

1、什么是版本控制

单点来说Q版本控制就是数据仓库,它可以记录你Ҏ件的每次更改。这Pq你在昏天黑地的改了几个月后老板说不要了Q还是按照过去那P你也不会抓狂Q简单的恢复版本操作搞定一切?/p>

2、什么是 Subversion

Subversion是一个自?开源版本控制系l,它管理文件和目录可以越旉。一l文件存攑֜中心版本库,q个版本库很像一个普通的文g服务器,只是它可以记录每一ơ文件和目录的修改,q便使你可以取得数据以前的版本,从而可以检查所作的更改。从q个斚w看,许多人把版本控制pȝ当作一U?#8220;旉机器”?/p>

Subversion可以通过|络讉K它的版本库,从而用户可以在不同的电脑上用。一定程度上可以_允许用户在各自的地方修改同一份数据是促进协作。进展可能非常的q速,q没有一个所有的改变都会取得效果的通道Q由于所有的工作都有历史版本Q你不必担心׃失去某个通道而媄响质量,如果存在不正的改变Q只要取消改变?/p>

一些版本控制系l也?a title="软g" target="_blank" style="text-decoration: none; color: #000000; cursor: pointer; ">软g配置理(SCM)pȝQ这U系l经q特定的_y设计来管理源代码Q有许多关于软g开发的Ҏ?#8212;本n理解~程语言、或者提供构建程序的工具。然而,Subversion不是q样一个系l,它是一个通用pȝQ可以管理Q何类型的文g集,对你q可能是源代码,对别人,可能是一个货物报价单或者是书稿Q或者是电媄剪辑{?/p>

3、版本库(repository)

Subversion 的核心就?repository Q中文翻译成“版本?#8221;。就是位于服务器端,l一理和储存数据的地方?/p>

二、安?/strong>

Subversion的设计包括一个抽象的|络层,q意味着版本库可以通过各种服务?/a>q程讉K。理ZԌSubversion可以使用无限数量的网l协议实玎ͼ目前实践中存在着两种服务?/a>?/p>

• SVNServerQsvnserve 是一个小?也叫d?、独立服务器Q用自己定义的协议和客L?作者注Q以下称q种服务器ؓ“svnserver服务?#8221;?

• ApacheSVNQApache是最行的web服务器,通过使用 mod_dav_svn 模块QApache可以讉K版本库,q且可以使客L使用HTTP的扩展协议WebDAV/DeltaVq行讉K?作者注Q以下称q种服务器ؓ“ApacheSVN服务?#8221;?

下面介绍 SVNServer 服务器的安装QApacheSVN 服务器的安装使用L我写的《Subversion高应用QSVN的多U认证方式》?/p>

环境

OSQWindows XP SP2

WebQApache 2.2.6

SVNQsvn-win32-1.4.6

1、准备工作?/p>

(1)获取 Subversion 服务器程序?/p>

到官方网?http://subversion.tigris.org/)下蝲最新的服务器安装程序。目前最新的?.4.6版本Q具体下载地址在:http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100&expandFolder=8100&folderID=91 Q注意找 for apache 2.2.x 版本的?/p>

(2)获取 TortoiseSVN 客户端程序?/p>

从官方网?http://tortoisesvn.net/downloads 获取最新的 TortoiseSVN 。TortoiseSVN 是一个客LE序Q用来与 subvers 服务器端通讯。Subversion 自带一个客LE序 svn.exe ,?TortoiseSVN 更好操作Q提高效率?/p>

2、安装服务器端和客户?/p>

首先安装 Apache 2.2.6 Q具体安装方法大家参考相兌料,或者参看我写的《Windows下安装Apache 2.2.x》?/p>

其次安装 Subversion(以下USVN)的服务器端和客户端。下载下来的服务器端是个 zip 压羃包,直接解压~即可,比如我解压到 E:\subversion 。客L安装文g是个 exe 可执行文Ӟ直接q行按提C安装即可,客户端安装完成后提示重启?/p>

3、徏立版本库(Repository)

q行Subversion服务器需要首先要建立一个版本库(Repository)。版本库可以看作是服务器上集中存攑֒理数据的地斏V?/p>

开始徏立版本库。首先徏?e:\svn I文件夹作ؓ所有版本库的根目录。然后,q入命o行ƈ切换到subversion的bin目录。输入如下命令:

此命令在 E:\svn 下徏立一个版本库 repos1 。repos1 下面会自动生成一些文件夹和文件?/p>

我们也可以?TortoiseSVN 囑Ş化的完成q一步:

先徏立空目录 E:\svn\repos1 Q注意一定是要空的。然后在 repos1 文g夹上“右键->TortoiseSVN->Create Repository here...”Q然后可以选择版本库模式,q里使用默认的FSFS卛_Q然后就创徏了一pd文g夹和文gQ同命o行徏立的一栗?/p>

4、运行独立服务器

此时 subversion 服务q没有开始,只是通过它的命o建立了版本库。l在刚才的命令窗口输入: 

svnserve 会在端?3690 {待hQ?-daemon(两个短横U?选项告诉 svnserve 以守护进E方式运行,q样在手动终止之前不会退出。注意不要关闭命令行H口Q关闭窗口会?svnserve 停止?/p>

Z验证svnserve正常工作Q用TortoiseSVN -> Repo-browser 来查看版本库。在弹出?URL 对话框中输入Q?nbsp;

?OK 按钮后就可以看见 repos1 版本库的目录树结构了Q只不过q时 repos1 是个I库?/p>

你也可以使用--root选项讄根位|来限制服务器的讉K目录Q从而增?a title="安全" target="_blank" style="text-decoration: none; color: #000000; cursor: pointer; ">安全性和节约输入svnserve URL的时_ 

  svnserve.exe --daemon --root drive:\path\to\repository

以前面的试作ؓ例,svnserve 会q行为: 

  svnserve.exe --daemon --root e:\svn

然后TortoiseSVN中的版本库浏览器URL~减为: 

  svn://localhost/repos1

三、基本配|?/strong>

SVNServer服务?/a>安装完成后,必须l过基本配置才能使用?/p>

1、配|用户和权限

用文本编辑器打开E:\svn\repos1\conf目录Q修改svnserve.confQ?/p>

: 

改ؓQ?nbsp;

卛_掉前面的 # 注释W,注意前面不能有空根{?/p>

然后修改同目录的passwd文gQ增加一个帐P

增加帐号Q?/p>

2、初始化导入

下面是我们的数据(目)导入到这个版本库Q以后就q本库理我们的数据。我们的M改动都会被版本库记录下来Q甚x们自׃失、改错数据时版本库也能帮我们扑֛数据?/p>

比如Q我?d:\wwwroot 下有?guestbook 文g夹,里面存放的是我编写的留言程序。在此文件夹?#8220;右键 -> TortoiseSVN -> Import...” Q在弹出对话框的“URL of repository”输入“svn://localhost/repos1/guestbook”。在“Import message”输入“导入整个留言?#8221;作ؓ注释?/p>

?OK 后要求输入帐受我们在用户名和密码处都输入 test 。完成后 guestbook 中的内容全部导入C svn://localhost/svn/repos1/guestbook ?/p>

我们看到?e:\svn\repos1 没有M变化Q连?guestbook 文g多w没有建立Q唯一的变化就是e:\svn\repos1定w变大了。实际上我们源guestbook中的内容已经导入 repos1 版本库了Q源 guestbook 文g夹可以删除了?/p>

需要注意的是,q一步操作可以完全在另一台安装了 TortoiseSVN 的客h上进行。例如运行svnserve的主机的IP?33.96.121.22Q则URL部分输入的内容就?#8220;svn://133.96.121.22” ?/p>

四、基本操作流E?/strong>

1、取?check out)

取出版本库到一个工作拷贝:

来到LI目录下Q比如在f分区建立一个空文g?f:\work ?#8220;右键 -> SVN Checkout”。在“URL of repository”中输?#8220;svn://localhost/svn/repos1/guestbook”Q这h们就得到了一?guestbook 中内容的工作拯?/p>

2、存?check in)/提交(commit)

在工作拷贝中作出修改q提交:

?guestbook 工作拯中随便打开一个文Ӟ作出修改Q然?#8220;右键 -> SVN Commit... ”。这h们就把修Ҏ交到了版本库Q版本库Ҏ情况存储我们提交的数据?/p>

在修改过的文件上“右键 -> TortoiseSVN -> Show Log” Q可以看到对q个文g所有的提交。在不同?revision 条目?#8220;右键 -> Compare with working copy”Q我们可以比较工作拷贝的文g和所?revision 版本的区别?/p>



Wangkeke 2012-06-01 10:25 发表评论
]]>
Xcode 中用Githubhttp://m.shnenglu.com/cokecoffe/archive/2012/04/22/172373.htmlWangkekeWangkekeSun, 22 Apr 2012 13:37:00 GMThttp://m.shnenglu.com/cokecoffe/archive/2012/04/22/172373.htmlhttp://m.shnenglu.com/cokecoffe/comments/172373.htmlhttp://m.shnenglu.com/cokecoffe/archive/2012/04/22/172373.html#Feedback0http://m.shnenglu.com/cokecoffe/comments/commentRss/172373.htmlhttp://m.shnenglu.com/cokecoffe/services/trackbacks/172373.htmlW一步:Z的macd认证Q得它能够q接到github?/p>
参考http://help.github.com/mac-set-up-git/  一步一步操作即?/div>
====================================================================
W二步:新徏目
先在github里面d一个RepositoryQ通过http://github.com/首页的new Repositoryq接q入Q填写相关的目信息Q创建即可。创建后会蟩转到初始目界面Q先暂停Q在W三步再使用q个界面?/div>
在mac上用xcode新徏一个项目,为项目用gitQ创E中使用 create local git repository for this projectQ指定要存储的目录即可?/div>
====================================================================
W三步:初始化提交项?/div>
回到W二步github创徏目后的界面。初始化有几U方式,q里我们选择从已有仓库提交代码。执行下面的代码卛_?/div>

Existing Git Repo?

   cd existing_git_repo    
   git remote add origin git@github.com:your_account/your_project.git   
   git push -u origin master
上面的代码将本地的仓库连接到q程仓库Qƈ且将代码提交到master分支上?/span>
====================================================================
W四步:提交代码
   新徏的文ӞXCode会提CZ个A标签Q表C是added的?/span>
   ~辑的文ӞXCode会提CZ个M标签Q表C是Modified的?/span>
   选中要更新的文gQ右?->Source Control-->Commit Selected Files 通过此操作将变更提交到本地的仓库中?/span>
   选中要更新的文gQFile菜单-->Source Control-->Push 本地变化存储到q程服务器中?/span>

fromQ?span style="text-decoration: underline;">http://qiufangzhou.blog.163.com/blog/static/506421802011924102515390/


Wangkeke 2012-04-22 21:37 发表评论
]]>公钥 U钥http://m.shnenglu.com/cokecoffe/archive/2011/10/19/158703.htmlWangkekeWangkekeWed, 19 Oct 2011 13:32:00 GMThttp://m.shnenglu.com/cokecoffe/archive/2011/10/19/158703.htmlhttp://m.shnenglu.com/cokecoffe/comments/158703.htmlhttp://m.shnenglu.com/cokecoffe/archive/2011/10/19/158703.html#Feedback0http://m.shnenglu.com/cokecoffe/comments/commentRss/158703.htmlhttp://m.shnenglu.com/cokecoffe/services/trackbacks/158703.html   
 
 一Q公钥私?nbsp;
 
 1Q公钥和U钥成对出现 
 
 2Q公开的密钥叫公钥Q只有自q道的叫私?nbsp;
 
 3Q用公钥加密的数据只有对应的U钥可以解密 
 
 4Q用U钥加密的数据只有对应的公钥可以解密 
 
 5Q如果可以用公钥解密Q则必然是对应的U钥加的?nbsp;
 
 6Q如果可以用U钥解密Q则必然是对应的公钥加的?nbsp;
 
 明白了? 
  
 
 假设一下,我找了两个数字,一个是1Q一个是2。我喜欢2q个数字Q就保留hQ不告诉你们Q然后我告诉大家Q?是我的公钥?nbsp;
  
 
 我有一个文Ӟ不能让别人看Q我q1加密了。别人找Cq个文gQ但是他不知?是解密的私钥啊Q所以他解不开Q只有我可以用数?Q就是我的私钥,来解密。这h可以保护数据了?nbsp;
  
 
 我的好朋友x用我的公?加密了字WaQ加密后成了bQ放在网上。别人偷Cq个文gQ但是别不开Q因为别Z知道2是我的U钥Q只有我才能解密Q解密后得到a。这P我们可以传送加密的数据了?nbsp;
  
 
 现在我们知道用公钥加密,然后用私钥来解密Q就可以解决安全传输的问题了。如果我用私钥加密一D|据(当然只有我可以用U钥加密Q因为只有我知道2是我的私钥)Q结果所有的人都看到我的内容了,因ؓ他们都知道我的公钥是1Q那么这U加密有什么用处呢Q?nbsp;
  
 
但是我的好朋友x说有人冒充我l他发信。怎么办呢Q我把我要发的信Q内ҎcQ用我的U钥2Q加密,加密后的内容是dQ发lxQ再告诉他解密看是不是c。他用我的公?解密Q发现果然是c。这个时候,他会惛_Q能够用我的公钥解密的数据,必然是用我的U钥加的密。只有我知道我得U钥Q因此他可以确认确实是我发的东ѝ这h们就能确认发送方w䆾了。这个过E叫做数字签名。当然具体的q程要稍微复杂一些。用U钥来加密数据,用途就是数字签名?nbsp;
  
 
 好,我们复习一下: 
 
 1Q公钥私钥成对出?nbsp;
 
 2Q私钥只有我知道 
 
 3Q大家可以用我的公钥l我发加密的信了 
 
 4Q大家用我的公钥解密信的内容Q看看能不能解开Q能解开Q说明是l过我的U钥加密了,可以确认确实是我发的了?nbsp;
  
 
 ȝ一下结论: 
 
 1Q用公钥加密数据Q用U钥来解密数?nbsp;
 
 2Q用U钥加密数据Q数字签名)Q用公钥来验证数字签名?nbsp;
  
 
 在实际的使用中,公钥不会单独出现QL以数字证书的方式出现Q这hZ公钥的安全性和有效性?/span>

Wangkeke 2011-10-19 21:32 发表评论
]]>
复习Linux中的一些零知识点http://m.shnenglu.com/cokecoffe/archive/2011/09/25/156771.htmlWangkekeWangkekeSun, 25 Sep 2011 10:47:00 GMThttp://m.shnenglu.com/cokecoffe/archive/2011/09/25/156771.htmlhttp://m.shnenglu.com/cokecoffe/comments/156771.htmlhttp://m.shnenglu.com/cokecoffe/archive/2011/09/25/156771.html#Feedback0http://m.shnenglu.com/cokecoffe/comments/commentRss/156771.htmlhttp://m.shnenglu.com/cokecoffe/services/trackbacks/156771.html1.查找grep、find
在Linux下,常用 grep列出Q文件内容)含有某个字符串的文g?br />                       find命o查找匚wl定Q文件名Q的文g?br />grep用法Q?nbsp;grep [options] PATTERN [FILE]
例子Q?br />               grep "main" * -R//查找当前目录下的所有文件、目录中包含“main”字样的文?br />find用法Q?nbsp;find [-H] [-L] [-P] [path] [expression]
例子Q?br />               find /work/driver/net -name "*fb*"//查找/work/drivers/net目录下名字中包含fb的文?/span>

2.压羃、解压羃、打包、解?tar
压羃解压~常用的两种方式Qgzip、bzip2
一般而言Q?#8220;.gz”?#8220;z”l尾的文件是gzip方式压羃的;
              “.bz2”l尾的文件是以bzip2方式q行压羃的;
              后缀中有tar字样时表C是一个文件包Q?br />tar?个常用选项:1.c    创徏Q用来生成文件包
2.x   提取Q从文g包中提取文g
3.z   使用gzip方式q行处理Q压~、解压羃Q?/blockquote>
4.j    使用bzip2方式q行处理Q压~、解压羃Q?/blockquote>
5.f    表示文gQ后面接着一个文件名


Wangkeke 2011-09-25 18:47 发表评论
]]>FreeType的?/title><link>http://m.shnenglu.com/cokecoffe/archive/2011/09/07/155264.html</link><dc:creator>Wangkeke</dc:creator><author>Wangkeke</author><pubDate>Wed, 07 Sep 2011 02:47:00 GMT</pubDate><guid>http://m.shnenglu.com/cokecoffe/archive/2011/09/07/155264.html</guid><wfw:comment>http://m.shnenglu.com/cokecoffe/comments/155264.html</wfw:comment><comments>http://m.shnenglu.com/cokecoffe/archive/2011/09/07/155264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/cokecoffe/comments/commentRss/155264.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/cokecoffe/services/trackbacks/155264.html</trackback:ping><description><![CDATA[<span style="font-family: simsun; font-size: 14px; line-height: 23px; ">在嵌入式环境中显C字体,如果采用炚w的方式,要先取得汉字的点阵表CŞ式,然后Ҏ炚w中每一位是否ؓ1来决定是否对屏幕上相应的像素赋|如果采用矢量字体的话Q例如用freetype库来昄TrueTypecd的字体时Q其大致的过E如下:<br />1.初始化库<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span> <span style="color: #000000; ">FT_Library library;<br /></span><span style="color: #008080; ">2</span> FT_Face face;<font class="Apple-style-span" color="#008080"><br />3</font> <span style="color: #000000; ">FT_Error error </span><span style="color: #000000; ">=</span><span style="color: #000000; "> FT_Init_FreeType( </span><span style="color: #000000; ">&</span><span style="color: #000000; ">library );</span> <span style="color: #000000; "></span></div><br />2. 加蝲相应的字体文?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">error </span><span style="color: #000000; ">=</span><span style="color: #000000; "> FT_New_Face( library, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">/usr/share/fonts/truetype/arial.ttf</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, </span><span style="color: #000000; ">&</span><span style="color: #000000; ">face );<br /></span></div><br />3. 讄字体的大?nbsp; <br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span> <span style="color: #000000; ">error </span><span style="color: #000000; ">=</span><span style="color: #000000; "> FT_Set_Char_Size(face, </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> handle to face object </span><span style="color: #008000; ">*/</span><span style="color: #000000; ">  <br /></span><span style="color: #008080; ">2</span> <span style="color: #000000; ">  </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> char_width in 1/64th of points </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">3</span> <span style="color: #000000; ">  </span><span style="color: #000000; ">16</span><span style="color: #000000; ">*</span><span style="color: #000000; ">64</span><span style="color: #000000; ">, </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> char_height in 1/64th of points </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">4</span> <span style="color: #000000; ">  </span><span style="color: #000000; ">300</span><span style="color: #000000; ">, </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> horizontal device resolution </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">5</span> <span style="color: #000000; ">  </span><span style="color: #000000; ">300</span><span style="color: #000000; "> ); </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> vertical device resolution </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">6</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">7</span> <span style="color: #000000; ">  error </span><span style="color: #000000; ">=</span><span style="color: #000000; "> FT_Set_Pixel_Sizes(face, </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> handle to face object </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">8</span> <span style="color: #000000; ">  </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> pixel_width </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">9</span> <span style="color: #000000; ">  </span><span style="color: #000000; ">16</span><span style="color: #000000; "> ); </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> pixel_height </span><span style="color: #008000; ">*/</span></div><br />4. 加蝲字符的glyph<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span> <span style="color: #000000; ">glyph_index </span><span style="color: #000000; ">=</span><span style="color: #000000; "> FT_Get_Char_Index( face, charcode );<br /></span><span style="color: #008080; ">2</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">3</span> <span style="color: #000000; ">error </span><span style="color: #000000; ">=</span><span style="color: #000000; "> FT_Load_Glyph(face, </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> handle to face object </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">4</span> <span style="color: #000000; ">  glyph_index, </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> glyph index </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">5</span> <span style="color: #000000; ">  load_flags ); </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> load flags, see below </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">6</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">7</span> <span style="color: #000000; ">error </span><span style="color: #000000; ">=</span><span style="color: #000000; "> FT_Render_Glyph( face</span><span style="color: #000000; ">-></span><span style="color: #000000; ">glyph, </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> glyph slot </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">8</span> <span style="color: #000000; ">  render_mode ); </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> render mode </span><span style="color: #008000; ">*/</span><font class="Apple-style-span" color="#008080"><br /></font><span style="color: #000000; "></span></div><br />5. 字体变换(旋{和羃?<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span> <span style="color: #000000; ">error </span><span style="color: #000000; ">=</span><span style="color: #000000; "> FT_Set_Transform( face, </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> target face object </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">2</span> <span style="color: #000000; ">  </span><span style="color: #000000; ">&</span><span style="color: #000000; ">matrix, </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> pointer to 2x2 matrix </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">3</span> <span style="color: #000000; ">  </span><span style="color: #000000; ">&</span><span style="color: #000000; ">delta ); </span><span style="color: #008000; ">/*</span><span style="color: #008000; "> pointer to 2d vector </span><span style="color: #008000; ">*/</span></div><br />6. 把字W显C出?br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span> <span style="color: #000000; ">draw_bitmap( </span><span style="color: #000000; ">&</span><span style="color: #000000; ">slot</span><span style="color: #000000; ">-></span><span style="color: #000000; ">bitmap, pen_x </span><span style="color: #000000; ">+</span><span style="color: #000000; "> slot</span><span style="color: #000000; ">-></span><span style="color: #000000; ">bitmap_left, pen_y </span><span style="color: #000000; ">-</span><span style="color: #000000; "> slot</span><span style="color: #000000; ">-></span><span style="color: #000000; ">bitmap_top );</span></div></span><img src ="http://m.shnenglu.com/cokecoffe/aggbug/155264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/cokecoffe/" target="_blank">Wangkeke</a> 2011-09-07 10:47 <a href="http://m.shnenglu.com/cokecoffe/archive/2011/09/07/155264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BMP数据l构分析http://m.shnenglu.com/cokecoffe/archive/2011/08/03/152326.htmlWangkekeWangkekeWed, 03 Aug 2011 02:08:00 GMThttp://m.shnenglu.com/cokecoffe/archive/2011/08/03/152326.htmlhttp://m.shnenglu.com/cokecoffe/comments/152326.htmlhttp://m.shnenglu.com/cokecoffe/archive/2011/08/03/152326.html#Feedback0http://m.shnenglu.com/cokecoffe/comments/commentRss/152326.htmlhttp://m.shnenglu.com/cokecoffe/services/trackbacks/152326.html

BMP文gl构
1Q?/span>BMP文gl成
BMP文g由文件头、位图信息头、颜色信息和囑Ş数据四部分组成?/span>
2Q?/span>BMP文g?14字节)
BMP文g头数?/span>l构含有BMP文g的类型、文件大和位图起始位置{信息?/span>
?/span>l构定义如下:
typedef struct tagBITMAPFILEHEADER
{
WORDbf Type; // 位图文g的类型,必须?/span>BMP(0-1字节)
DWORD bfSize; // 位图文g的大,以字节ؓ单位(2-5字节)
WORD bfReserved1; // 位图文g保留字,必须?(6-7字节)
WORD bfReserved2; // 位图文g保留字,必须?(8-9字节)
DWORD bfOffBits; // 位图数据的v始位|,以相对于位图(10-13字节)
// 文g头的偏移量表C,以字节ؓ单位
} BITMAPFILEHEADER;
3Q位图信息头(40字节)
BMP位图信息头数据用于说明位囄寸{信息?/span>
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; // ?/span>l构所占用字节?14-17字节)
LONG biWidth; // 位图的宽度,以像素ؓ单位(18-21字节)
LONG biHeight; // 位图的高度,以像素ؓ单位(22-25字节)
WORD biPlanes; // 目标讑֤的别,必须?(26-27字节)
WORD biBitCount;// 每个像素所需的位敎ͼ必须?(双色),(28-29字节)
// 4(16?Q?(256??4(真彩?之一
DWORD biCompression; // 位图压羃cdQ必L 0(不压~?,(30-33字节)
// 1(BI_RLE8压羃cd)?(BI_RLE4压羃cd)之一
DWORD biSizeImage; // 位图的大,以字节ؓ单位(34-37字节)
LONG biXPelsPerMeter; // 位图水^分L率,每米像素?38-41字节)
LONG biYPelsPerMeter; // 位图垂直分L率,每米像素?42-45字节)
DWORD biClrUsed;// 位图实际使用的颜色表中的颜色?46-49字节)
DWORD biClrImportant;// 位图昄q程中重要的颜色?50-53字节)
} BITMAPINFOHEADER;
4Q颜色表
颜色表用于说明位图中的颜Ԍ它有若干个表,每一个表Ҏ一个RGBQUADcd?/span>l构Q定义一U颜艌ӀRGBQUADl构的定义如?
typedef struct tagRGBQUAD {
BYTE rgbBlue;// 蓝色的亮?D围ؓ0-255)
BYTE rgbGreen; // l色的亮?D围ؓ0-255)
BYTE rgbRed; // U色的亮?D围ؓ0-255)
BYTE rgbReserved;// 保留Q必Mؓ0
} RGBQUAD;
颜色表中RGBQUADl构数据的个数有biBitCount来确?
当biBitCount=1,4,8Ӟ分别?,16,256个表?
当biBitCount=24Ӟ没有颜色表项?/span>
位图信息头和颜色表组成位图信息,BITMAPINFOl构定义如下:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader; // 位图信息?/span>
RGBQUAD bmiColors[1]; // 颜色?/span>
} BITMAPINFO;
5Q位图数?/u>
位图数据记录了位囄每一个像素|记录序是在扫描行内是从左到?扫描行之间是从下C。位囄一个像素值所占的字节?
当biBitCount=1Ӟ8个像素占1个字?
当biBitCount=4Ӟ2个像素占1个字?
当biBitCount=8Ӟ1个像素占1个字?
当biBitCount=24?1个像素占3个字?
Windows规定一个扫描行所占的字节数必L
4的倍数(即以long为单?,不的以0填充Q?/span>
biSizeImage = ((((bi.biWidth * bi.biBitCount) + 31) & ~31) / 8) * bi.biHeight;
具体数据举例Q?/span>
如某BMP文g开_
4D42 4690 0000 0000 0000 4600 0000 2800 0000 8000 0000 9000 0000 0100*1000 0300 0000 0090 0000 A00F 0000 A00F 0000 0000 0000 0000 0000*00F8 0000 E007 0000 1F00 0000 0000 0000*02F1 84F1 04F1 84F1 84F1 06F2 84F1 06F2 04F2 86F2 06F2 86F2 86F2 .... ....
BMP文g可分为四个部分:位图文g头、位图信息头、彩色板、图像数据阵列,在上图中已用*分隔?/span>
一、图像文件头
1Q?Q?q里的数字代表的??,即两个字?下同)囑փ文g头?x4D42=’BM’Q表C是Windows支持?/span>BMP格式?/span>
2Q?-3Q整个文件大?690 0000Qؓ00009046h=36934?/span>
3Q?-5Q保留,必须讄??/span>
4Q?-7Q从文g开始到位图数据之间的偏U量?600 0000Qؓ00000046h=70Q上面的文g头就?5?70字节?/span>
二、位图信息头
5Q?-9Q位囑֛信息头长度?/span>
6Q?0-11Q位囑֮度,以像素ؓ单位?000 0000Qؓ00000080h=128?/span>
7Q?2-13Q位N度,以像素ؓ单位?000 0000Qؓ00000090h=144?/span>
8Q?4Q位囄位面敎ͼ该值L1?100Qؓ0001h=1?/span>
9Q?5Q每个像素的位数。有1Q单ԌQ?Q?6ԌQ?Q?56ԌQ?6Q?4KԌ高彩ԌQ?4Q?6MԌ真彩ԌQ?2Q?096MԌ增强型真彩色Q?000?010h=16?/span>
10Q?6-17Q压~说明:?Q不压羃Q,1QRLE 8Q?位RLE压羃Q,2QRLE 4Q?位RLE压羃Q?QBitfieldsQ位域存放)。RLE单地说是采用像素?像素值的方式q行压羃。T408采用的是位域存放方式Q用两个字节表示一个像素,位域分配为r5b6g5。图?300 0000?0000003h=3?/span>
11Q?8-19Q用字节数表C的位图数据的大,该数必须?的倍数Q数g{于Q?#8805;位图宽度的最的4的倍数Q?#215;位图高度×每个像素位数?090 0000?0009000h=80×90×2h=36864?/span>
12Q?0-21Q用象素/cC的水^分L率。A00F 0000?000 0FA0h=4000?/span>
13Q?2-23Q用象素/cC的垂直分L率。A00F 0000?000 0FA0h=4000?/span>
14Q?4-25Q位图用的颜色索引数。设?的话Q则说明使用所有调色板V?/span>
15Q?6-27Q对图象昄有重要媄响的颜色索引的数目。如果是0Q表C都重要?/span>
三、彩色板
16Q?8-....(不确?Q彩色板规范。对于调色板中的每个表项Q用下述Ҏ来描qRGB的|
1字节用于蓝色分量
1字节用于l色分量
1字节用于U色分量
1字节用于填充W?讄?)
对于24-位真彩色囑փ׃使用彩色板,因ؓ位图中的RGB值就代表了每个象素的颜色?/span>
如,彩色板ؓ00F8 0000 E007 0000 1F00 0000 0000 0000Q其中:
00FB 0000为FB00h=1111100000000000Q二q制Q,是蓝色分量的掩码?/span>
E007 0000?07E0h=0000011111100000Q二q制Q,是绿色分量的掩码?/span>
1F00 0000?01Fh=0000000000011111Q二q制Q,是红色分量的掩码?/span>
0000 0000总设|ؓ0?/span>
掩码跟像素D?#8220;?#8221;q算再进行移位操作就可以得到各色分量倹{看看掩码,可以明白事实上在每个像素值的两个字节16位中Q按从高C???位分别就是r、g、b分量倹{取出分量值后把r、g、b值分别乘???可以补齐第个分量ؓ一个字节,再把q三个字节按rgbl合Q放入存储器Q同栯反序Q,可以{换ؓ24位标?/span>BMP格式了?/span>
四、图像数据阵?/span>
17)27(无调色板)-Q.Q:每两个字节表CZ个像素。阵列中的第一个字节表CZ囑ַ下角的象素,而最后一个字节表CZ囑֏上角的象素?/span>
五、存储算?/span>
BMP文g通常是不压羃的,所以它们通常比同一q图像的压羃囑փ文g格式要大很多。例如,一?00×600?4位几乎占?.4MBI间。因此它们通常不适合在因特网或者其它低速或者有定w限制的媒介上q行传输。根据颜色深度的不同Q图像上的一个像素可以用一个或者多个字节表C,它由n/8所定Qn是位深度Q?字节包含8个数据位Q。图片浏览器{基于字节的ASCIID像素的颜色Q然后从调色板中d相应的倹{更l的信息请参阅下面关于位图文件的部分?n?nU颜色的位图q似字节数可以用下面的公式计: BMP文g大小U等?54+4*2的nơ方+Qw*h*n)/8
Q其中高度和宽度都是像素数。需要注意的是上面公式中?4是位图文件的文g_是彩色调色板的大。另外需要注意的是这是一个近似|对于n位的位图囑փ来说Q尽可能有最?n中颜Ԍ一个特定的囑փ可能q不会用这些所有的颜色。由于彩色调色板仅仅定义了图像所用的颜色Q所以实际的彩色调色板将于。如果想知道q些值是如何得到的,请参考下面文件格式的部分。由于存储算法本w决定的因素Q根据几个图像参数的不同计算出的大小与实际的文g大小会有一些细的差别?/span>


Wangkeke 2011-08-03 10:08 发表评论
]]>
þþþþһ| 㽶þӰԺ| þ99Ʒþþþþ벥| һaɫƬþٸһHƬѷ | ƷŮþþþ| 97Ʒ97þþþþ| ŷƷۺϾþ| ݹƷþ| ƷۺϾþ| Ʒŷþþþ޹ | þ99þ99Ʒӿ| ƷþþþþӰԺ | ŷһþþþþþôƬ| Ʒþþþþþ| Ⱦþվȡ| ɫۺϾþþƷĻҳ| Ʒ99þþþþ鶹| 99þùۺϾƷӰԺ | ݺۺϾþۺ88| þþþþAv뾫Ʒר| ŷþþþþҹƷ| Ʒþþþav| þݺҹҹ2O2O| þĻ˿| þ| þþþŮʦһ| re99þþƷ99| Ʒþ777| þþƷƷ޾Ʒ| þþƷĻ鶹 | þþþþþþ66ƷƬ| þþžѸƵ| þøһëƬ| þþþƷר| 69þҹɫƷ69| 97þó˾Ʒվ| þþƷ˘AV| 99þþƷһ | þþAVҰ| þþþþþòҰ¸߳| 2021ھþþƷ|