2007年5月31日星期四

PPM/PGM/PBM 图像文件格式

http://www.cppblog.com/windcsn/archive/2005/11/11/PPM.html

PPM->Portable PixMap
PGM->Portable GreyMap
PBM->Portable BitMap

PBM支持单色图(1个像素位)
PGM支持灰度图形,能够读PBM图形和PGM图形,输出PGM图形
PPM支持真彩色图形,可以读上面所有格式,输出PPM图形

PPM图形文件格式:
包 括两个部分,头部分和图象数据部分。头部分由三部分组成,这三部分由回车或换行分割,但PPM的标准中是要求空格。第一行通常是P3或P6,说明是PPM 格式;第二行是图象的宽度和高度,用ASCII来表示;最后一部分是描述像素的最大颜色组成,这里允许描述超过一个字节(0-255)的颜色值。另外可以 在上面个部分的后面用#来追加注释,注释行是从#到该行末。
下面是PPM头的例子:
例子1:
P6 1024 778 255
例子2:
P6
1024 778
255
例子3:
P6#PPM文件格式
1024 778#宽度和高度
# 注释
255

PPM图象数据的格式依赖于PPM自身的表示,如果是P3格式,数据将以ASCII文本来表示,每个像素的值从0到前面的最大值,每行不应该长于70个字符,如下:
例子4:
P3
# example from the man page
4 4
15
0 0 0 0 0 0 0 0 0 15 0 15
0 0 0 0 15 7 0 0 0 0 0 0
0 0 0 0 0 0 0 15 7 0 0 0
15 0 15 0 0 0 0 0 0 0 0 0

如果是P6格式,图象数据以字节格式存储,每个色彩成分(r,g,b)一个字节。仅仅在头部的最后一个字段的前面才能有注释,在头部的最后一个字段后面通常是一个回车或换行。P6图象文件比P3文件小,读起来更快。注意,P6文件仅仅用作但字节彩色。

但并没有按照格式规约的要求来,通常的习惯,图象从上到下,从左到右被存储。每个像素以一个字节来存储,0表示黑色,255表示白色。色彩成分按照通常的红-绿-蓝顺序爱存储。

PGM
该格式文件存储灰度图形,也就是这里每个像素使用一个值来表示而不是3个(R,G,B)。同PPM唯一不同的是头部用P2和P5,分别表示用ASCII和字节码来表示数据。
例如:
P2
24 7
15
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0
0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0
0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

PBM
使用ASCII的0或1方式来表示数据,0表示白色,1表示黑色。与PPM、PGM不同的头部是少了第三行,因为第三行的最大色彩值在这个模式下已经没有意义了;如下:
P1
# PBM example
24 7
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0
0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0
0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0
0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


http://www.wanfangdata.com.cn/qikan/periodical.Articles/wjsjyy/wjsj2000/0004/000419.htm

PBM(Portable bitmap)是图像文件格式,包括三大类:

移动式(黑白)位图文件PBM,

移动式像素图文件PPM,

移动式灰度图文件PGM.

通称为PNM文件.

PNM 文件的结构非常简单,没有压缩.由表头和图像数据两部分组成.表头数据各项之间用空格(空格键、制表键、回车键或换行键)隔开,表头由四部分组成:

幻数:指明文件的类型以及图像数据的存储方式;

图像宽度;

图像高度;

最大灰度值或颜色值.

其中图像宽度、高度和最大值这三项是ASCII码十进制数. 注意,PBM格式的表头中最大值隐含为1.

表头的下面是图像数据区,描述了"宽度×高度个像素.图像数据有两种存储格式:

ASCIIRAWBITS.

RAWBITSASCII存储格式的一种变体.PNM文件的图像数据以ASCII码存放,PBM文件的幻数取值是两个字符P1,PGM的幻数是P2,PPM的幻数是P3.

PNM文件各图像数据之间可用空格隔开.规定每行不超过70个字符.图像数据内容是:

PBM文件的图像数据是01二值数据,1代表黑色,0代表白色.

PGM文件包括的是灰度级数据,0值代表黑色,最大值代表白色.

PPM文件包括的颜色数据,0值代表无此颜色,最大值代表颜色为最大.

PBMPGM文件中,每个像素对应一个ASCII码十进制数. 而在PPM,每个像素对应3ASCII码十进制数,分别代表红,绿,. ASCII相比, RAWBITS存储格式具有以下5个不同之处:

所对应的幻数不同.在此存储方式下,PBMPGMPPM这三种文件的幻数分别是字符P4P5P6.

占据更少的空间,读写的速度要快很多倍.

像素以字节的形式存储. PBM文件中,一个字节存放8个像素点,从高位到低位逐次排列. PGM中一个字节存放1个像素. PPM3个字节存放1个像素.

图像数据区不允许有空格. 仅允许最大值之后,数据区之前有1个空格.

图像数据的最大值只能小于或等于255.

PNM文件格式被许多种位图转换滤波器用作通用语言,充当不同文件之间格式转换的媒介物.在因特网和许多BBS系统下,可找到关于此类文件和其他格式文件相互转换的源程序.PNM文件的工作平台是UNIX和连接因特网的PC.

2007年5月30日星期三

DirectShow学习笔记-1 如何调试"How To Play a File"例子

在联机文档中的How To Play a File例子

1. 使用MS Visual C++创建一个Win32 Console Application
2. 将代码拷贝到工程中.
3. 在Project Setting -> Link -> Object/Library modules中增加strmbasd.lib uuid.lib winmm.lib.
4. 修改代码中的媒体文件
hr = pGraph->RenderFile(L"d:\\temp\\CLOCKTXT.avi", NULL);
5. 编译并执行.

2007年5月28日星期一

svn 使用

在另外一台PC上使用svn update, 出现
svn: Not authorized to open root of edit operation, 但是在其它机器上没有出现这个问题.

修改svn的authz文件, 加入
* = r
该问题就不会初出现.

DirectShow开发快速入门之慨述

http://dev.yesky.com/254/2074254.shtml
http://dev.yesky.com/254/2074254.shtml

DirectShow开发快速入门之慨述

http://dev.yesky.com/254/2074254_1.shtml

2007年5月23日星期三

Embedded HTTP Server List

GoAhead http://webserver.goahead.com/webserver/webserver.htm
BOA http://www.boa.org/
EHS http://xaxxon.slackworks.com/ehs/
AppWeb http://www.appwebserver.org/

2007年5月10日星期四

ARM Developer Suite Study

ADS中有几份资料:
Assembler Guide. 提供了ADS汇编器的指导和参考信息, 描述了汇编器的命令行参数, 给汇编语言程序员提供了可能的伪指令和指令, 和ARM, Thumb和向量浮点(VFP)指令集.

AXD and armsd Debuggers Guide. 分为两个部分, 第一部分描述了ARM eXtended Debugger(AXD)的图形用户接口单元. 这个最新的ARM调试器并且是ADS的一部分. 指南信息包括AXD的主要特点的演示. 如果AXD是你唯一使用的调试器, 你可以忽略Part B, 但是你可能不得不阅读本书最后的附录, 词汇表和索引. 第二部分描述了ARM符号调试器.

CodeWarrior IDE Guide. 介绍了ADS的CodeWarrior IDE的使用信息. 介绍了CodeWarrior IDE的主要图形用户接口组件, 并且给出了ARM-specific特点的信息.

Compilers and Libraries Guide. 提供了ADS的参考信息. 给出了编译器的命令行选项. 这本书也给出了C/C++编译器和C库在ARM应用中的参考资料.

Debug Target Guide. 提供了ADS的参考信息. 包括ARMulator, ARM处理器仿真器. Semihosting SWIs, 你的ARM程序到你主计算机上的入门工具? 这本书是给使用ARM Debuggers, armsd和AXD的开发者用的.

Developer Guide. 提供了基于ARM处理器家族的代码编写指南信息.

Getting Started. 给出了ADS工具和文档的概述.

Installation and License Mangement. FLEXlm的安装使用.

Linker and Utilities Guide. 提供了ADS的参考信息. 描述了ADS中连接器和其它工具的命令行选项.

阅读顺序:
Getting Started -> CodeWarrior IDE Guide -> Developer Guide

Linux eval command

eval的作用是将eval后面的内容也当作shell命令来执行, 比如以下命令:

[frank@aladdin test_eval_sh]$ aa="date"
[frank@aladdin test_eval_sh]$ echo $aa
date
[frank@aladdin test_eval_sh]$ eval $aa
Thu May 10 16:30:32 CST 2007
[frank@aladdin test_eval_sh]$

eval这个命令用起来有些复杂, 如何理解其"二次解释执行"是比较重要的
有个文件test_eval_1.sh:
var1="date"
date
echo $var1

[frank@aladdin test_eval_sh]$ sh test_eval_1.sh
Thu May 10 18:03:12 CST 2007
date

[frank@aladdin test_eval_sh]$ eval `cat test_eval_1.sh`
date: too many non-option arguments: 1234 ...
Try `date --help' for more information.
[frank@aladdin test_eval_sh]$
就相当于date命令后面跟了两个以上的错误的参数. 这里注意$var1的值并不是test_eval_1.sh中的"date", 而是存在与外部shell中的一个值. shell中的变量的行为要进一步研究一下.

如果将test_eval_1.sh的内容改为
var1="date"
date;
echo $var1

[frank@aladdin test_eval_sh]$ sh test_eval_1.sh
Thu May 10 18:08:02 CST 2007
date
[frank@aladdin test_eval_sh]$ eval `cat test_eval_1.sh`
Thu May 10 18:08:21 CST 2007
1234 4556
[frank@aladdin test_eval_sh]$
两者的执行结果结果类似

注意, 使用eval `cat xxx`的方式, 不能处理xxx中有#注释行的内容, 如果文件中有#则结果不同.

2007年5月9日星期三

Study Method

首先阅读资料, 把原理搞清楚. 这个阶段需要比较长的时间, 而且外人看来没有什么功效. 将资料分类整理, 确定阅读的顺序和方法.

然后开始分析代码. 看代码要从整体框架入手, 技术的原理和算法在代码中事如何分布的, 一个功能模块的前申模块和后继模块是什么. 搞清楚这个代码流程.

然后找一个切入点开始进行具体的分析.

讨论交流很重要.

2007年5月8日星期二

扬声器参数

扬声器的主要性能指标有:灵敏度、频率响应、额定功率、额定阻抗、指向性以及失真等

例如这对喇叭音频是多少呢?<20-20000h赫兹>,阻抗是多少呢?<4,6,8奥姆>, 分频点是多少呢?<低频至中频是多少HZ,中频至高频是多HZ>,输出功率是多少瓦呢?瞬间输出功率呢?讯噪比是多少db呢?

声音的组成,即声音的三要素 ——响度、音调、音品(音色)

响度:声音大小声,与发音体产生的声波振幅有关
音调:声音的高低,与发音体产生的振动频率有关
音品:声音的独特性,与发音体产生的波形有关
为什么同时能有不同的声音出现这就涉及到声音的本质。正是由于声音的三要素,世界万物的声音才会千变万化,它不仅仅是和声音的频率有关的。

IP CAMERA

网络摄像机向无线, 智能化方向发展.
使用presence技术, 可以了解camera的状态.

2007年5月7日星期一

GNU Hello

在读许彦明的"轻轻松松产生Makefile"时, 看到里面提到了GNU Coding Standards (http://www.gnu.org/prep/standards/). 在GNU Coding Standards中提到了GNU Hello program (http://www.gnu.org/software/hello/hello.html).

目前最新版本是hello-2.2, 下载之后进行configure, make.
在source code中有一个test目录. 里面有几个脚本文件. 要运行这几个脚本文件, 需要将"hello"所在的路径加入${PATH}中.

greeting-1: 测试-g参数, 是否与预料的结果一致.
greeting-2: 这个也是测试-g参数, 只是-g之后的字符串比较长, 运行时提示必须在"full moon"时才能运行.
hello-1: 测试不跟参数时的结果是否与预料的一致.
traditional-1: 测试传统的结果"hello, world"