??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美影片第一页,欧美日韩亚洲精品内裤,欧美午夜性色大片在线观看http://www.shnenglu.com/cokecoffe/category/17381.htmlzh-cnSat, 02 Jun 2012 23:20:33 GMTSat, 02 Jun 2012 23:20:33 GMT60Subversion基础Q概c(din)安装、配|和基本操作(转)(j)http://www.shnenglu.com/cokecoffe/archive/2012/06/01/177030.htmlWangkekeWangkekeFri, 01 Jun 2012 02:25:00 GMThttp://www.shnenglu.com/cokecoffe/archive/2012/06/01/177030.htmlhttp://www.shnenglu.com/cokecoffe/comments/177030.htmlhttp://www.shnenglu.com/cokecoffe/archive/2012/06/01/177030.html#Feedback0http://www.shnenglu.com/cokecoffe/comments/commentRss/177030.htmlhttp://www.shnenglu.com/cokecoffe/services/trackbacks/177030.html

转自:http://www.uml.org.cn/pzgl/200902137.asp
摘要Q介l了(jin) Subversion 的基本概c(din)详l讲解了(jin)在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版本控制就是数据仓库,它可以记录你Ҏ(gu)件的每次更改。这Pq你在昏天黑地的改?jin)几个月后老板说不要了(jin)Q还是按照过去那P你也不会(x)抓狂Q简单的恢复版本操作搞定一切?/p>

2、什么是 Subversion

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

Subversion可以通过|络讉K它的版本库,从而用户可以在不同的?sh)脑上用。一定程度上可以_(d)允许用户在各自的地方修改同一份数据是?j)进协作。进展可能非常的q速,q没有一个所有的改变都会(x)取得效果的通道Q由于所有的工作都有历史版本Q你不必担心(j)׃失去某个通道而媄(jing)响质量,如果存在不正的改变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开发的Ҏ(gu)?#8212;本n理解~程语言、或者提供构建程序的工具。然而,Subversion不是q样一个系l,它是一个通用pȝQ可以管理Q何类型的文g集,对你q可能是源代码,对别人,可能是一个货物报价单或者是书稿Q或者是?sh)?jing)剪辑{?/p>

3、版本库(repository)

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

二、安?/strong>

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

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

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

下面介绍 SVNServer 服务器的安装QApacheSVN 服务器的安装使用L(fng)我写的《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具体下载地址在:(x)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 是一个客L(fng)E序Q用来与 subvers 服务器端通讯。Subversion 自带一个客L(fng)E序 svn.exe ,?TortoiseSVN 更好操作Q提高效率?/p>

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

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

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

3、徏立版本库(Repository)

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

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

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

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

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

4、运行独立服务器

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

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

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

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

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

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

以前面的试作ؓ(f)例,svnserve 会(x)q行为:(x) 

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

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

  svn://localhost/repos1

三、基本配|?/strong>

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

1、配|用户和权限

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

:(x) 

改ؓ(f)Q?nbsp;

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

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

:(x)

增加帐号Q?/p>

2、初始化导入

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

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

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

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

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

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

1、取?check out)

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

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

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

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

?guestbook 工作拯中随便打开一个文Ӟ作出修改Q然?#8220;右键 -> SVN Commit... ”。这h们就把修Ҏ(gu)交到?jin)版本库Q版本库Ҏ(gu)情况存储我们提交的数据?/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://www.shnenglu.com/cokecoffe/archive/2012/04/22/172373.htmlWangkekeWangkekeSun, 22 Apr 2012 13:37:00 GMThttp://www.shnenglu.com/cokecoffe/archive/2012/04/22/172373.htmlhttp://www.shnenglu.com/cokecoffe/comments/172373.htmlhttp://www.shnenglu.com/cokecoffe/archive/2012/04/22/172373.html#Feedback0http://www.shnenglu.com/cokecoffe/comments/commentRss/172373.htmlhttp://www.shnenglu.com/cokecoffe/services/trackbacks/172373.htmlW一步:(x)Z的macd认证Q得它能够q接到github?/p>
参考http://help.github.com/mac-set-up-git/  (tng)一步一步操作即?/div>
====================================================================
W二步:(x)新徏目
先在github里面d一个RepositoryQ通过http://github.com/首页的new Repositoryq接q入Q填写相关的目信息Q创建即可。创建后?x)蟩转到初始目界面Q先暂停Q在W三步再使用q个界面?/div>
在mac上用xcode新徏一个项目,为项目用gitQ创E中使用 create local git repository for this projectQ指定要存储的目录即可?/div>
====================================================================
W三步:(x)初始化提交项?/div>
回到W二步github创徏目后的界面。初始化有几U方式,q里我们选择从已有仓库提交代码。执行下面的代码卛_?/div>

Existing Git Repo?

   cd existing_git_repo    (tng)
   git remote add origin git@github.com:your_account/your_project.git   (tng)
   git push -u origin master
上面的代码将本地的仓库连接到q程仓库Qƈ且将代码提交到master分支上?/span>
====================================================================
W四步:(x)提交代码
   新徏的文ӞXCode?x)提CZ个A标签Q表C是added的?/span>
   ~辑的文ӞXCode?x)提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://www.shnenglu.com/cokecoffe/archive/2011/10/19/158703.htmlWangkekeWangkekeWed, 19 Oct 2011 13:32:00 GMThttp://www.shnenglu.com/cokecoffe/archive/2011/10/19/158703.htmlhttp://www.shnenglu.com/cokecoffe/comments/158703.htmlhttp://www.shnenglu.com/cokecoffe/archive/2011/10/19/158703.html#Feedback0http://www.shnenglu.com/cokecoffe/comments/commentRss/158703.htmlhttp://www.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;
 
 明白?jin)?nbsp;
  
 
 假设一下,我找?jin)两个数字,一个是1Q一个是2。我喜欢2q个数字Q就保留hQ不告诉你们Q然后我告诉大家Q?是我的公钥?nbsp;
  
 
 我有一个文Ӟ不能让别人看Q我q1加密?jin)。别人找C(jin)q个文gQ但是他不知?是解密的私钥啊Q所以他解不开Q只有我可以用数?Q就是我的私钥,来解密。这h可以保护数据了(jin)?nbsp;
  
 
 我的好朋友x用我的公?加密?jin)字WaQ加密后成了(jin)bQ放在网上。别人偷C(jin)q个文gQ但是别不开Q因为别Z知道2是我的U钥Q只有我才能解密Q解密后得到a。这P我们可以传送加密的数据?jin)?nbsp;
  
 
 现在我们知道用公钥加密,然后用私钥来解密Q就可以解决安全传输的问题(sh)(jin)。如果我用私钥加密一D|据(当然只有我可以用U钥加密Q因为只有我知道2是我的私钥)(j)Q结果所有的人都看到我的内容?jin),因?f)他们都知道我的公钥是1Q那么这U加密有什么用处呢Q?nbsp;
  
 
但是我的好朋友x说有人冒充我l他发信。怎么办呢Q我把我要发的信Q内Ҏ(gu)cQ用我的U钥2Q加密,加密后的内容是dQ发lxQ再告诉他解密看是不是c。他用我的公?解密Q发现果然是c。这个时候,他会(x)惛_Q能够用我的公钥解密的数据,必然是用我的U钥加的密。只有我知道我得U钥Q因此他可以确认确实是我发的东ѝ这h们就能确认发送方w䆾?jin)。这个过E叫做数字签名。当然具体的q程要稍微复杂一些。用U钥来加密数据,用途就是数字签名?nbsp;
  
 
 好,我们复习(fn)一下:(x) 
 
 1Q公钥私钥成对出?nbsp;
 
 2Q私钥只有我知道 
 
 3Q大家可以用我的公钥l我发加密的信了(jin) 
 
 4Q大家用我的公钥解密信的内容Q看看能不能解开Q能解开Q说明是l过我的U钥加密?jin),可以确认确实是我发的?jin)?nbsp;
  
 
 ȝ一下结论:(x) 
 
 1Q用公钥加密数据Q用U钥来解密数?nbsp;
 
 2Q用U钥加密数据Q数字签名)(j)Q用公钥来验证数字签名?nbsp;
  
 
 在实际的使用中,公钥不会(x)单独出现QL以数字证书的方式出现Q这hZ(jin)公钥的安全性和有效性?/span>

Wangkeke 2011-10-19 21:32 发表评论
]]>
复习(fn)Linux中的一些零知识点http://www.shnenglu.com/cokecoffe/archive/2011/09/25/156771.htmlWangkekeWangkekeSun, 25 Sep 2011 10:47:00 GMThttp://www.shnenglu.com/cokecoffe/archive/2011/09/25/156771.htmlhttp://www.shnenglu.com/cokecoffe/comments/156771.htmlhttp://www.shnenglu.com/cokecoffe/archive/2011/09/25/156771.html#Feedback0http://www.shnenglu.com/cokecoffe/comments/commentRss/156771.htmlhttp://www.shnenglu.com/cokecoffe/services/trackbacks/156771.html1.查找grep、find
在Linux下,常用 grep列出Q文件内容)(j)含有某个字符串的文g?br />                       find命o(h)查找匚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://www.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://www.shnenglu.com/cokecoffe/archive/2011/09/07/155264.html</guid><wfw:comment>http://www.shnenglu.com/cokecoffe/comments/155264.html</wfw:comment><comments>http://www.shnenglu.com/cokecoffe/archive/2011/09/07/155264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/cokecoffe/comments/commentRss/155264.html</wfw:commentRss><trackback:ping>http://www.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Ş式,然后Ҏ(gu)炚w中每一位是否ؓ(f)1来决定是否对屏幕上相应的像素赋|如果采用矢量字体的话Q例如用freetype库来昄TrueTypecd的字体时Q其大致的过E如下:(x)<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://www.shnenglu.com/cokecoffe/aggbug/155264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cokecoffe/" target="_blank">Wangkeke</a> 2011-09-07 10:47 <a href="http://www.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://www.shnenglu.com/cokecoffe/archive/2011/08/03/152326.htmlWangkekeWangkekeWed, 03 Aug 2011 02:08:00 GMThttp://www.shnenglu.com/cokecoffe/archive/2011/08/03/152326.htmlhttp://www.shnenglu.com/cokecoffe/comments/152326.htmlhttp://www.shnenglu.com/cokecoffe/archive/2011/08/03/152326.html#Feedback0http://www.shnenglu.com/cokecoffe/comments/commentRss/152326.htmlhttp://www.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的大,以字节ؓ(f)单位(2-5字节)
WORD bfReserved1; // 位图文g保留字,必须?(6-7字节)
WORD bfReserved2; // 位图文g保留字,必须?(8-9字节)
DWORD bfOffBits; // 位图数据的v始位|,以相对于位图(10-13字节)
// 文g头的偏移量表C,以字节ؓ(f)单位
} BITMAPFILEHEADER;
3Q位图信息头(40字节)
BMP位图信息头数据用于说明位囄寸{信息?/span>
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; // ?/span>l构所占用字节?14-17字节)
LONG biWidth; // 位图的宽度,以像素ؓ(f)单位(18-21字节)
LONG biHeight; // 位图的高度,以像素ؓ(f)单位(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; // 位图的大,以字节ؓ(f)单位(34-37字节)
LONG biXPelsPerMeter; // 位图水^分L率,每米像素?38-41字节)
LONG biYPelsPerMeter; // 位图垂直分L率,每米像素?42-45字节)
DWORD biClrUsed;// 位图实际使用的颜色表中的颜色?46-49字节)
DWORD biClrImportant;// 位图昄q程中重要的颜色?50-53字节)
} BITMAPINFOHEADER;
4Q颜色表
颜色表用于说明位图中的颜Ԍ它有若干个表,每一个表Ҏ(gu)一个RGBQUADcd?/span>l构Q定义一U颜艌ӀRGBQUADl构的定义如?
typedef struct tagRGBQUAD {
BYTE rgbBlue;// 蓝色的亮?D围ؓ(f)0-255)
BYTE rgbGreen; // l色的亮?D围ؓ(f)0-255)
BYTE rgbRed; // U色的亮?D围ؓ(f)0-255)
BYTE rgbReserved;// 保留Q必Mؓ(f)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>
位图数据记录?jin)位囄每一个像素|记录序是在扫描行内是从左到?扫描行之间是从下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开_(d)(x)
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可分为四个部分:(x)位图文g头、位图信息头、彩色板、图像数据阵列,在上图中已用*分隔?/span>
一、图像文件头
1Q?Q?q里的数字代表的??,即两个字?下同)囑փ文g头?x4D42=’BM’Q表C是Windows支持?/span>BMP格式?/span>
2Q?-3Q整个文件大?690 0000Qؓ(f)00009046h=36934?/span>
3Q?-5Q保留,必须讄??/span>
4Q?-7Q从文g开始到位图数据之间的偏U量?600 0000Qؓ(f)00000046h=70Q上面的文g头就?5?70字节?/span>
二、位图信息头
5Q?-9Q位囑֛信息头长度?/span>
6Q?0-11Q位囑֮度,以像素ؓ(f)单位?000 0000Qؓ(f)00000080h=128?/span>
7Q?2-13Q位N度,以像素ؓ(f)单位?000 0000Qؓ(f)00000090h=144?/span>
8Q?4Q位囄位面敎ͼ该值L1?100Qؓ(f)0001h=1?/span>
9Q?5Q每个像素的位数。有1Q单Ԍ(j)Q?Q?6Ԍ(j)Q?Q?56Ԍ(j)Q?6Q?4KԌ高彩Ԍ(j)Q?4Q?6MԌ真彩Ԍ(j)Q?2Q?096MԌ增强型真彩色Q?000?010h=16?/span>
10Q?6-17Q压~说明:(x)?Q不压羃Q,1QRLE 8Q?位RLE压羃Q,2QRLE 4Q?位RLE压羃Q?QBitfieldsQ位域存放)(j)。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对图象昄有重要媄(jing)响的颜色索引的数目。如果是0Q表C都重要?/span>
三、彩色板
16Q?8-....(不确?Q彩色板规范。对于调色板中的每个表项Q用下述Ҏ(gu)来描qRGB的|(x)
1字节用于蓝色分量
1字节用于l色分量
1字节用于U色分量
1字节用于填充W?讄?)
对于24-位真彩色囑փ׃使用彩色板,因ؓ(f)位图中的RGB值就代表?jin)每个象素的颜色?/span>
如,彩色板ؓ(f)00F8 0000 E007 0000 1F00 0000 0000 0000Q其中:(x)
00FB 0000为FB00h=1111100000000000Q二q制Q,是蓝色分量的掩码?/span>
E007 0000?07E0h=0000011111100000Q二q制Q,是绿色分量的掩码?/span>
1F00 0000?01Fh=0000000000011111Q二q制Q,是红色分量的掩码?/span>
0000 0000总设|ؓ(f)0?/span>
掩码跟像素D?#8220;?#8221;q算再进行移位操作就可以得到各色分量倹{看看掩码,可以明白事实上在每个像素值的两个字节16位中Q按从高C???位分别就是r、g、b分量倹{取出分量值后把r、g、b值分别乘?sh)???可以补齐第个分量ؓ(f)一个字节,再把q三个字节按rgbl合Q放入存储器Q同栯反序Q,可以{换ؓ(f)24位标?/span>BMP格式?jin)?/span>
四、图像数据阵?/span>
17)27(无调色板)-Q.Q:(x)每两个字节表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似字节数可以用下面的公式计:(x) BMP文g大小U等?54+4*2的nơ方+Qw*h*n)/8
Q其中高度和宽度都是像素数。需要注意的是上面公式中?4是位图文件的文g_(d)是彩色调色板的大。另外需要注意的是这是一个近似|对于n位的位图囑փ来说Q尽可能有最?n中颜Ԍ一个特定的囑փ可能q不?x)用这些所有的颜色。由于彩色调色板仅仅定义?jin)图像所用的颜色Q所以实际的彩色调色板将于。如果想知道q些值是如何得到的,请参考下面文件格式的部分。由于存储算法本w决定的因素Q根据几个图像参数的不同计算出的大小与实际的文g大小会(x)有一些细的差别?/span>


Wangkeke 2011-08-03 10:08 发表评论
]]>
žžþþƷר| ŷƷž99þڹۿ| þAV| þþۺϾɫۺϾ| þþþAVȥ| ɫۺϾþ88ɫۺ| AVþ| AVþþƷ| Ʒ18þþ⺾| 91þþƷ91ɫҲ| þùƷƷ| þݺҹҹ2020| һaɫƬþ| պþ| 99鶹þþùƷ| ɫۺϾþ88ɫۺ| þþþۺϹŷһ| þɫۺϼ| þù׽| 鶹һ99þþþ| Ʒþþþþۺձ| þþƷ˵| þþþ߽ۺϳ| AAAþþþƷƬ| ˾þۺ2020| þĻ| þþþĻ| ƷþþþþþþӰԺ| AëƬþ| ھƷþþþþĻ| ۺϾþþƷ| 99ȳ˾ƷȾþ669| ɫۺϾþ| þ96Ʒþþ| ۺϾþþƷ| þùһ| Ʒþþþþ| þ99ù龫Ʒ66| þùһƬѹۿ| Ʒþþþþ֣ݹ˾| AŮAVۺϾþþ|