﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-一针见血-文章分类-J2ME</title><link>http://www.cppblog.com/gtwdaizi/category/5207.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 17 Apr 2009 06:11:59 GMT</lastBuildDate><pubDate>Fri, 17 Apr 2009 06:11:59 GMT</pubDate><ttl>60</ttl><item><title>J2ME中Socket如何正确读取缓冲区中的数据</title><link>http://www.cppblog.com/gtwdaizi/articles/36778.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Thu, 16 Apr 2009 01:34:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/36778.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/36778.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/36778.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/36778.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/36778.html</trackback:ping><description><![CDATA[<p dir=ltr><span style="COLOR: #ff0000">1.问题描述</span><br><br>在wkt模拟器上, 通过以下代码可以正确的读出数据:<br>&nbsp;<br><span style="COLOR: #0000ff">&nbsp;conn = (SocketConnection) Connector.open(url, Connector.READ_WRITE, true);<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;is = conn.openDataInputStream();<br>&nbsp;&nbsp;os = conn.openDataOutputStream();<br>&nbsp;&nbsp;// 创建登陆报文<br>&nbsp;&nbsp;loginPacketBytes = generateLoginPacket();<br>&nbsp;<br>&nbsp;&nbsp;// 发送登陆报文<br>&nbsp;&nbsp;// System.out.println("****发送登陆报文****");<br>&nbsp;&nbsp;os.write(loginPacketBytes, 0, loginPacketBytes.length);<br>&nbsp;&nbsp;os.flush();<br>&nbsp;<br>&nbsp;&nbsp;// 先读取ConstantValue.HEADER_LENGTH个字节,循环遍历寻找正确的魔数<br>&nbsp;&nbsp;recByteNum = is.read(recBytes, 0, ConstantValue.READ_LENGTH);</span><br><br>若从服务器真是返回的字节数是100个字节, 而<font color=#0000ff>ConstantValue.READ_LENGTH</font>定义的长度大于100.<br>&nbsp;那么在模拟器上没有问题, 能够读到100个字节.<br><br>但是到了真机上面测试, 若定义的要读取的字节数大于实际传送的字节数, 那就会出现异常情况. </p>
导致根本就读不到数据. <br><br><span style="COLOR: red">2.解决方法<br></span><br>先读取一小部分数据, 得到报文头(一般都有报文头, 报文头中都有整个报文的总长度)<br>解析报文头, 这里需要注意的是可能收到的第一个数据并不就是报文的有效数据, 报文的有效数据可能并不在数据缓冲区的首位置, 所以需要正确找到报文头, 方法各不相同, 有的是使用魔数这种方式, 有个就靠判断某个值是否等于报文的总长度. 总之记住有效报文的开始位置, 这里记着index,<br>然后创建一个字节缓冲区, 刚好来接受剩余的数据<br><span style="COLOR: #0000ff">byte addBytes[] = new byte[recHeader.getBufferSize() + index&nbsp;- (recByteNum - ConstantValue.HEADER_LENGTH)];<br>is.readFully(addBytes);</span><br>这样一般就可以正确的读出有效数据了. <br><br><span style="COLOR: red"><strong>3.最新方法</strong></span><br>&nbsp;&nbsp;&nbsp;int loop = 0;<br>&nbsp;&nbsp;&nbsp;int hasReadLen = 0;<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;// 读取报文头<br>&nbsp;&nbsp;&nbsp;while (true)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;loop++;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;if (loop &gt;= m_oNET_DVR.m_iTimeOutVal / NET_DVR_PARAM.LOOP_INTERVAL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDK.SetLastError(NET_DVR_Dec.NET_DVR_NETWORK_RECV_TIMEOUT);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NET_DVR_Dec.RET_FAIL;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;if (m_oCfgIs.available() &gt;= NET_DVR_PARAM.REC_PACKET_HEADER_LENGTH)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 读取报文头<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recByteNum = m_oCfgIs.read(m_byCfgRecBuf, 0, NET_DVR_PARAM.REC_PACKET_HEADER_LENGTH);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hasReadLen += recByteNum;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (recByteNum == NET_DVR_PARAM.REC_PACKET_HEADER_LENGTH)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 解析报文总长度<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pakcetTotalLen &nbsp;= NetHelper.convertNetBytesToInt(m_byCfgRecBuf, 0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDK.SetLastError(NET_DVR_Dec.NET_DVR_NETWORK_RECV_ERROR);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NET_DVR_Dec.RET_FAIL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(NET_DVR_PARAM.LOOP_INTERVAL);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;// 读取报文体<br>&nbsp;&nbsp;&nbsp;while (true)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;loop++;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;if (loop &gt;= m_oNET_DVR.m_iTimeOutVal / NET_DVR_PARAM.LOOP_INTERVAL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDK.SetLastError(NET_DVR_Dec.NET_DVR_NETWORK_RECV_TIMEOUT);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NET_DVR_Dec.RET_FAIL;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;// 读取剩余数据<br>&nbsp;&nbsp;&nbsp;&nbsp;recByteNum = m_oCfgIs.read(m_byCfgRecBuf, hasReadLen, pakcetTotalLen - hasReadLen);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;hasReadLen += recByteNum;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;// 读取完毕<br>&nbsp;&nbsp;&nbsp;&nbsp;if (hasReadLen &gt;= pakcetTotalLen)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(100);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}
<img src ="http://www.cppblog.com/gtwdaizi/aggbug/36778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2009-04-16 09:34 <a href="http://www.cppblog.com/gtwdaizi/articles/36778.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[J2ME]在J2ME开发中获取系统属性 </title><link>http://www.cppblog.com/gtwdaizi/articles/70159.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Tue, 23 Dec 2008 06:23:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/70159.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/70159.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/70159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/70159.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/70159.html</trackback:ping><description><![CDATA[<div class=blog_content>在J2ME开发中，我们经常需要和手机系统进行交互，获得一些和系统相关的信息，在J2ME API设计中，提供了一系列的系统属性
<div align=center>表1 &nbsp;&nbsp;CLDC、MIDP和JTWI属性</div>
<div align=center>
<table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: 62.1pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div align=center>属性名称</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div align=center>属性作用</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.profiles</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的MIDP版本，返回格式值为&#8220;MIDP-1.0&#8221;或&#8220;MIDP-2.0&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.configuration</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的CLDC版本，返回格式值为&#8220;CLDC-1.0&#8221;或&#8220;CLDC-2.0&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.locale</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机所在的国家或地区，返回值格式为&#8220;en-US&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.platform</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机的品牌和型号，Nokia手机的返回值格式为&#8220;Nokia6310i/4.42&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.encoding</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机默认的字符集名称，返回值格式为&#8220;ISO-8859-1&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.commports</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机可以使用的串口列表，返回值中各个串口之间使用逗号分隔</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.hostname</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>MIDP2.0定义，代表本地主机名称，需要手机支持。</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.jtwi.version</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的JTWI版本，值必须是&#8220;1.0&#8221;</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div align=center>&nbsp;表2&nbsp;可选包属性</div>
<div align=center>
<table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: 62.1pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div align=center>属性名称</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div align=center>属性作用</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.media.version</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的MMAPI版本，如果不支持则返回null</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.pim.version</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的PIM API版本，如果不支持则返回null</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.m3g.version</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的M3G API版本，如果不支持则返回null</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.location.version</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的Location API版本，如果不支持则返回null</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>Bluetooth.api.version</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的BT API版本，如果不支持则返回null</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.io.file.</div>
            <div>FileConnection.version</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的FC API版本，如果不支持则返回null</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.global.version</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的Mobile Internationalization API(JSR-238)版本，如果不支持则返回null</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.chapi.version</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的CH(Content Handler) API(JSR211)版本，如果不支持则返回null</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>microedition.sip.version</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的SIP API版本，如果不支持则返回null</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div align=center>&nbsp;表3&nbsp;MMAPI属性</div>
<div align=center>
<table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: 62.1pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div align=center>属性名称</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div align=center>属性作用</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>supports.mixing</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机是否支持混音(同时播放多个Player)，返回值为&#8220;true&#8221;或&#8220;false&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>supports.audio.capture</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机是否支持声音捕获(录音)，返回值为&#8220;true&#8221;或&#8220;false&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>supports.video.capture</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机是否支持视频捕获(录像)，返回值为&#8220;true&#8221;或&#8220;false&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>supports.recording</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机是否支持记录(record)，返回值为&#8220;true&#8221;或&#8220;false&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>audio.encodings</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的声音格式，返回值格式为&#8220;encoding=audio/wav&#8221;，多个格式之间使用至少一个空格进行间隔</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>video.encodings</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的视频格式，返回值格式为&#8220;encoding=video/3gpp&#8221;，多个格式之间使用至少一个空格进行间隔</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>video.snapshot.encodings</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机使用getSnapshot方法获得的视频快照格式，返回值格式为&#8220;encoding=png&#8221;，多个格式之间使用至少一个空格进行间隔</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>streamable.contents</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机支持的流媒体格式，返回null代表不支持</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div align=center>表4 Wireless Messaging API属性</div>
<div align=center>
<table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: 62.1pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div align=center>属性名称</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div align=center>属性作用</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 150.95pt; PADDING-TOP: 0cm" vAlign=top width=201>
            <div>wireless.messaging.<a href="http://www.sf.org.cn/Soft/gongDown/sms/Index.html"><font color=#000000><u>sms</u></font></a>.<a href="http://www.sf.org.cn/Soft/gongDown/sms/Index.html"><font color=#000000><u>sms</u></font></a>c</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 175.1pt; PADDING-TOP: 0cm" vAlign=top width=233>
            <div>代表手机发送短信时的短信服务中心号码</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div align=center>表5 FileConnection API</div>
<div align=center>
<table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: 62.1pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" height=1185 cellSpacing=0 cellPadding=0 width=588 border=1>
    <tbody>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 151.55pt; PADDING-TOP: 0cm" vAlign=top width=202>
            <div align=center>属性名称</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 212.45pt; PADDING-TOP: 0cm" vAlign=top width=283>
            <div align=center>属性作用</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 151.55pt; PADDING-TOP: 0cm" vAlign=top width=202>
            <div>fileconn.dir.photos</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 212.45pt; PADDING-TOP: 0cm" vAlign=top width=283>
            <div>代表手机中存储照片和其它图片的目录，例如&#8220;file:///c:/My files/ Images /&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 151.55pt; PADDING-TOP: 0cm" vAlign=top width=202>
            <div>fileconn.dir.videos</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 212.45pt; PADDING-TOP: 0cm" vAlign=top width=283>
            <div>代表手机中存储视频的目录，例如&#8220;file:///c:/My files/Video clips/&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 151.55pt; PADDING-TOP: 0cm" vAlign=top width=202>
            <div>fileconn.dir.tones</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 212.45pt; PADDING-TOP: 0cm" vAlign=top width=283>
            <div>代表手机中存储声音的目录，例如&#8220;file:///c:/My files/Tones/&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 151.55pt; PADDING-TOP: 0cm" vAlign=top width=202>
            <div>fileconn.dir.memorycard</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 212.45pt; PADDING-TOP: 0cm" vAlign=top width=283>
            <div>代表手机中存储卡的根目录。例如&#8220;file:///d:/&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 151.55pt; PADDING-TOP: 0cm" vAlign=top width=202>
            <div>fileconn.dir.private <br>(Nokia S40不支持)&nbsp;</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 212.45pt; PADDING-TOP: 0cm" vAlign=top width=283>
            <div>代表手机中MIDlet的私有工作目录，例如&#8220;file:///c:/System/MIDlets/[1015f294]/scratch&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 151.55pt; PADDING-TOP: 0cm" vAlign=top width=202>
            <div>fileconn.dir.photos.name</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 212.45pt; PADDING-TOP: 0cm" vAlign=top width=283>
            <div>代表手机中图片目录的名称，例如&#8220;Images&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 151.55pt; PADDING-TOP: 0cm" vAlign=top width=202>
            <div>fileconn.dir.videos.name</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 212.45pt; PADDING-TOP: 0cm" vAlign=top width=283>
            <div>代表手机中视频目录的名称，例如&#8220;Video clips&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 151.55pt; PADDING-TOP: 0cm" vAlign=top width=202>
            <div>fileconn.dir.tones.name</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 212.45pt; PADDING-TOP: 0cm" vAlign=top width=283>
            <div>代表手机中声音目录的名称，例如&#8220;Sound clips&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 151.55pt; PADDING-TOP: 0cm" vAlign=top width=202>
            <div>file.separator</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 212.45pt; PADDING-TOP: 0cm" vAlign=top width=283>
            <div>代表手机中的文件分隔符，例如&#8220;/&#8221;</div>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 151.55pt; PADDING-TOP: 0cm" vAlign=top width=202>
            <div>fileconn.dir.memorycard.name</div>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 212.45pt; PADDING-TOP: 0cm" vAlign=top width=283>
            <div>代表手机中存储卡的名称，例如&#8220;Memory card&#8221;</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div align=left>&nbsp;使用这些属性，可以获得在程序运行过程中需要的很多和系统相关的信息，也可以使用表2中的属性来获得手机是否支持对应的可选包等信息。<br>实际使用示例：String name = System.getProperty(&#8220;microedition.platform&#8221;);<br><br>注意：如果需要获得JVM或jad文件中的信息，需要使用MIDlet类中的getAppProperty方法，其属性名则需要查阅jad文件的设定，和本文所述的属性名无关。<br></div>
</div>
<img src ="http://www.cppblog.com/gtwdaizi/aggbug/70159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2008-12-23 14:23 <a href="http://www.cppblog.com/gtwdaizi/articles/70159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[J2ME]文件操作 一</title><link>http://www.cppblog.com/gtwdaizi/articles/44761.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Fri, 13 Jun 2008 11:23:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/44761.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/44761.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/44761.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/44761.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/44761.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1. JSR75方式Jsr75分两个部分，一部分是File，即本地文件系统，一部分是PIM，就是电话本之类的信息，我先学习的是File部分，通过import javax.microedition.io.file.*里的包，可以实现自由访问本机的文件系统，就跟Windos里的资源管理器一样，在这里简单介绍一下:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp...&nbsp;&nbsp;<a href='http://www.cppblog.com/gtwdaizi/articles/44761.html'>阅读全文</a><img src ="http://www.cppblog.com/gtwdaizi/aggbug/44761.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2008-06-13 19:23 <a href="http://www.cppblog.com/gtwdaizi/articles/44761.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>手机开发平台指南、教程和资料介绍[转载]</title><link>http://www.cppblog.com/gtwdaizi/articles/47094.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Tue, 15 Apr 2008 01:31:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/47094.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/47094.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/47094.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/47094.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/47094.html</trackback:ping><description><![CDATA[<table style="TABLE-LAYOUT: fixed" height="100%" cellSpacing=0 cellPadding=0 width="100%" border=0>
    <tbody>
        <tr>
            <td align=left width="40%"><font color=red><strong><font color=red><strong>楼主</strong></font> </strong></font><strong>Posted:</strong>2008-3-22 10:42:55&nbsp;&nbsp;<a title=已记录 href="http://www.imtinewlife.com/BBS/Manage.asp?menu=lookip&amp;ThreadID=412&amp;PostID=865"><img src="http://www.imtinewlife.com/BBS/images/ip.gif" border=0></a></td>
            <td align=right width="60%" height=1><a class=TextButton title="查看 jacky 的个人资料" href="http://www.imtinewlife.com/BBS/Profile.asp?UserName=jacky"><u><font color=#0000ff>信息</font></u></a> <a class=TextButton title="查看 jacky 的个人共享空间" href="http://www.imtinewlife.com/BBS/Blog.asp?BlogUserName=jacky"><u><font color=#0000ff>日志</font></u></a> <a class=TextButton title="发送短讯息给 jacky" href="http://www.imtinewlife.com/BBS/MyFriend.asp?menu=Post&amp;incept=jacky"><u><font color=#0000ff>短讯</font></u></a> <a class=TextButton title="发送电邮给 jacky" href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#105;&#117;&#113;&#105;&#97;&#110;&#106;&#107;&#64;&#50;&#49;&#99;&#110;&#46;&#99;&#111;&#109;"><u><font color=#0000ff>邮箱</font></u></a> <a class=TextButton title="把 jacky 加入好友" href="http://www.imtinewlife.com/BBS/MyFriend.asp?menu=add&amp;UserName=jacky"><u><font color=#0000ff>好友</font></u></a> <a class=TextButton title="搜索 jacky 发表过的所有主题" href="http://www.imtinewlife.com/BBS/ShowBBS.asp?menu=5&amp;UserName=jacky"><u><font color=#0000ff>搜索</font></u></a> <a class=TextButton title=引用回复这个帖子 href="http://www.imtinewlife.com/BBS/ReTopic.asp?ThreadID=412&amp;PostID=865&amp;quote=True"><u><font color=#0000ff>引用</font></u></a> <a class=TextButton title=回复帖子 href="http://www.imtinewlife.com/BBS/ReTopic.asp?ThreadID=412&amp;PostID=865"><u><font color=#0000ff>回复</font></u></a> </td>
        </tr>
        <tr vAlign=top height=1>
            <td colSpan=2>
            <hr width="100%" SIZE=1>
            </td>
        </tr>
        <tr>
            <td vAlign=top colSpan=2 height="100%">
            <div style="OVERFLOW: auto; WIDTH: 100%">
            <div style="OVERFLOW: auto; WIDTH: 100%"><br>手机可分为智能手机开发和feather phone手机。开发平台可分为开放式平台和封闭式平台，开放式平台包括symbian、windows mobile、linux、Android、BlackBerry、j2me、brew等，支持手机应用程序通过OTA下载和安装；封闭式平台包括MTK、展讯、TI、飞利浦等。下面分别介绍。 <br>1． Symbian： <br>Symbian平台为目前智能手机市场的老大，智能手机全球市场占70%以上，在欧洲和亚洲占绝对优势，只是在美国市场份额少得可怜，希望今年nokia在美国发力，赶上其它智能手机。根据UI风格的不同，Symbian分为s60和UIQ两个平台，其中nokia使用s60平台，索爱和moto采用UIQ平台。Symbian平台由于发展时间较长，又是市场老大，目前中文资料也较多，不像几年前刚接触时只有英文资料。以下书籍值得推荐： <br>《SYMBIAN OS软件开发开发--应用C++开发智能手机应用程序入门》（其中UI部分为UIQ平台）， <br>《Series 60 应用程序开发》（以s60平台为主，重点推荐） <br>《Symbian OS C++手机应用开发 （第2卷）》 <br>另外今年将出来一本有关uiq3.0的新书，值得期待。 <br>关于symbian的开发网站和论坛： <br>诺基亚论坛：最好的symbian论坛， <br><a href="http://discussion.forum.nokia.com/forum/forumdisplay.php?f=6" target=_blank><u><font color=#0000ff>http://discussion.forum.nokia.com/forum/forumdisplay.php?f=6</font></u></a>，其中还有中文论坛。 <br>UIQ官方论坛：<a href="http://developer.uiq.com/" target=_blank><u><font color=#0000ff>http://developer.uiq.com/</font></u></a> <br>Symbian公司中文论坛：<a href="http://developer.symbian.com/forum/forum.jspa?forumID=37" target=_blank><u><font color=#0000ff>http://developer.symbian.com/forum/forum.jspa?forumID=37</font></u></a> <br>NewLC网站：<a href="http://www.newlc.com/" target=_blank><u><font color=#0000ff>http://www.newlc.com/</font></u></a> <br>索爱uiq官方论坛：<a href="http://developer.sonyericsson.com/category.jspa?categoryID=3" target=_blank><u><font color=#0000ff>http://developer.sonyericsson.com/category.jspa?categoryID=3</font></u></a> <br>索爱uiq中文论坛<a href="http://developer.sonyericsson.com/forum.jspa?forumID=133" target=_blank><u><font color=#0000ff>http://developer.sonyericsson.com/forum.jspa?forumID=133</font></u></a> <br><br>2．windows mobile： <br>智能手机全球市场中windows mobile占12%左右市场份额。开发与windows平台类似，所以熟悉windows开发的能很快上手。目前没有较好的针对windows mobile的书，经典书籍《Windows 程序设计（第5版）》对于开发win32程序依然是最好的，经典的书就是牛啊！虽然pocket pc支持MFC，但smartphone不支持，所以为了更好的移植，用win32开发较好。由本书做基础，再参考windows mobile的sdk以及示例代码，应该能很快上手。 <br>关于windows mobile的开发网站和论坛： <br>Windows mobile中文社区：<a href="http://www.winbile.net/BBS/" target=_blank><u><font color=#0000ff>http://www.winbile.net/BBS/</font></u></a> <br>Pocket pc forum：<a href="http://www.windowsmobiledn.com/forum" target=_blank><u><font color=#0000ff>http://www.windowsmobiledn.com/forum</font></u></a>/ <br>微软官方网站：<a href="http://www.microsoft.com/windowsmobile/developers/default.mspx" target=_blank><u><font color=#0000ff>http://www.microsoft.com/windowsmobile/developers/default.mspx</font></u></a> <br><br>3． linux： <br>智能手机全球市场中linux手机仅占可怜的4.4%市场份额。原来moto还出过不少linux手机，如A768、A1200、E680、E2、E6、V8等，07年8月份还信誓旦旦预测60%手机采用Linux OS，但moto后来回购了UIQ的股份，又与微软合作，还加入了google的开放手机联盟，看来要抛弃自己的linux平台了。另外，moto的策略是linux+j2me的模式，虽然采用linux os，但并不对外开放linux的sdk，只有和moto合作的厂家才能获得native linux sdk，所以导致目前linux手机开发的资料和论坛较少。虽然有民间linux高手破解了moto的linux的sdk，可以开发native linux的程序，但native linux的程序不能直接安装在moto的linux手机上，还必须安装一个插件，这对普通用户又是难以跨越的一个门槛。所以个人觉得native linux手机的开发将走向末路。大部分linux手机的ui开发都是基于QT，关于QT开发，可参考《C++ GUI Qt3编程》、《精通Qt4编程》，如果有moto官方的sdk，参考API文档以及一些示例代码，将可以较快上手，如果没有官方的sdk，那就要话很长时间hack了。目前没有很好的关于linux手机开发的论坛，个人推荐陈罡的博客<a href="http://www.cublog.cn/u/26691/" target=_blank><u><font color=#0000ff>http://www.cublog.cn/u/26691/</font></u></a>，内有moto a1200开发随笔，对于熟悉和了解手机native linux开发有很大帮助。 <br><br>4． MTK： <br>MTK最近几年异军突起，近70%的国产手机采用MTK的芯片和平台，黑手机更几乎是MTK的代名词。国内厂家只有夏新没有采用MTK的方案。MTK的模式名为&#8220;Turn-key&#8221;的全面解决方案，厂商采用了这个方案，只需要加一个手机外壳即可成品——这能大大降低了出货时间，一般厂家只修改界面、铃声以及增加一些应用软件。有关MTK平台的介绍，见环球企业家杂志的文章&#8220;国产手机操纵者联发科的秘密&#8221;<a href="http://www.cnbeta.com/articles/45580.htm" target=_blank><u><font color=#0000ff>http://www.cnbeta.com/articles/45580.htm</font></u></a>。 <br>MTK是私有平台，目前没有书籍介绍MTK平台，所以只能从网上查找MTK的资料。以下资料大家可以从网上获得，对于了解MTK很有帮助：《mtk 训练课程.pdf》、《MMI Platform Source Code Training.pdf》主要是MMI界面开发介绍、《MMI Resource &amp; Customization Tool.pdf》MMI资源工具介绍。 <br>最近，MTK平台ＭＭＩ设计牛人ＦＵＧＵＩ自己编写了一本有关mtk平台MMI开发的实例教程，书名为《MMI实例培训教程》（本书大家通过Google下载到），此书深入浅出，全面的介绍了MTK平台MMI开发的各个方面，通过本书，开发人员将能很快进入MTK平台开发领域，实为MTK平台MMI开发的圣经！MTK平台的操作系统为nucleus，有关nucleus的介绍网上有一篇文章《Nucleus实时操作系统分析报告》。MTK平台主要用C语言开发，所以要熟悉MTK开发，首先必须熟悉掌握C语言，MTK的sdk与vc6集成，MMI的各控件和窗口之间通过回调函数实现通讯。 <br>关于MTK的开发网站和论坛： <br>我爱研发网：<a href="http://www.52rd.com/" target=_blank><u><font color=#0000ff>http://www.52rd.com/</font></u></a> 上面几篇文章和书籍都能从本网站找到。 <br>手机研发论坛：<a href="http://www.1mp.cc/bbs/index.asp" target=_blank><u><font color=#0000ff>http://www.1mp.cc/bbs/index.asp</font></u></a> <br><br><br>5． 展讯： <br>展讯平台07年也发展很快，利用MTK下半年PA放大器缺货的机会，趁势而入，抢走mtk很多市场份额。展讯的开发模式和MTK的很类似，基本也是给厂家提供整体解决方案，与MTK的差别见此链接<a href="http://www.chinabyte.com/telecom/267/2507267.shtml" target=_blank><u><font color=#0000ff>http://www.chinabyte.com/telecom/267/2507267.shtml</font></u></a>。国内主要是夏新、联想、文泰等采用展讯平台。展讯平台采用的嵌入式操作系统是threadx，关于threadx的有一本中文书《嵌入式实时操作系统的多线程计算：基于ThreadX和ARM》。同MTK平台一样，为封闭平台，开发语言为C，开发环境为vc6, MMI的各控件和窗口之间与windows类似通过消息进制实现通讯。另外也没有书籍介绍展讯平台，以下资料值得推荐： <br>《Spreadtrum_SAP.ppt》 <br>《MMK_Kernel软件API接口说明书.doc》 <br>《MMK_Window_Table开发说明书.doc》 <br>《展讯平台MMI窗口开发说明书.pdf》 <br>《展讯手机平台软件简介.pdf》 <br>关于展讯的开发网站和论坛： <br>我爱研发网：<a href="http://www.52rd.com/" target=_blank><u><font color=#0000ff>http://www.52rd.com/</font></u></a> 上面几篇文章都能从本网站找到。 <br>手机研发论坛：<a href="http://www.1mp.cc/bbs/index.asp" target=_blank><u><font color=#0000ff>http://www.1mp.cc/bbs/index.asp</font></u></a> <br><br>6． J2ME： <br>J2ME平台为手机上运用最广泛的开放式平台，绝大部分手机均已经支持J2ME了。关于J2ME的书籍数不胜数，个人推荐以下书籍： <br>《j2me技术手册》 <br>《J2ME开发大全》 <br>《J2ME移动应用程序开发》 <br>关于J2ME的开发网站和论坛： <br>J2ME开发网：<a href="http://www.j2medev.com/Index.html" target=_blank><u><font color=#0000ff>http://www.j2medev.com/Index.html</font></u></a> <br>中国Java手机网：<a href="http://www.cnjm.net/" target=_blank><u><font color=#0000ff>http://www.cnjm.net/</font></u></a> <br>以及各手机厂商的官方java论坛 <br><br>7． Brew <br>Brew 的全称是无线二进制运行时环境。Brew平台是高通公司开发的，从无线应用程序开发、设备配置、应用程序分发以及计费和支付的完整端到端解决方案中的无线应用程序开发部分。目前绝大部分CDMA手机都支持Brew平台。学习Brew平台，首先需要熟悉c语言。学习步骤和方法可参考&#8221; BREW高手之路－解析BREW学习过程&#8221;。 <br>学习书籍： <br>《深入BREW手机游戏开发》 <br>《BREW 技术开发与应用》 <br>这些书虽然不够深入，但对于入门还是可以参考的。 <br>关于Brew的开发网站和论坛： <br>Brew官方论坛：<a href="http://brewforums.qualcomm.com/index.php" target=_blank><u><font color=#0000ff>http://brewforums.qualcomm.com/index.php</font></u></a> <br><br>8． Blackberry，Android，iPhone <br>黑莓公司BlackBerry手机和Google的Android手机均只支持java开发。苹果的iPhone不支持第3方开发，只能开发网页，据说将来开放sdk，值得期待。 <br>BlackBerry的开发网站和论坛： <br>BlackBerry开发者指南：<a href="http://www.cnblogs.com/confach/category/36451.html" target=_blank><u><font color=#0000ff>http://www.cnblogs.com/confach/category/36451.html</font></u></a>BlackBerry官方网站：<a href="http://na.blackberry.com/eng/developers/community.jsp" target=_blank><u><font color=#0000ff>http://na.blackberry.com/eng/developers/community.jsp</font></u></a><a href="http://bbs.maxpda.com/forum-184-1.html" target=_blank><u><font color=#0000ff>http://bbs.maxpda.com/forum-184-1.html</font></u></a> <br>Android的开发网站和论坛： <br><a href="http://www.androiddev.net.cn/bbs/" target=_blank><u><font color=#0000ff>http://www.androiddev.net.cn/bbs/</font></u></a> <br><a href="http://www.androidin.com/" target=_blank><u><font color=#0000ff>http://www.androidin.com/</font></u></a><a href="http://www.androidcn.net/" target=_blank><u><font color=#0000ff>http://www.androidcn.net/</font></u></a> <br>iPhone的开发网站和论坛： <br>一群苹果fans成立的网站：<a href="http://apple4.us/" target=_blank><u><font color=#0000ff>http://apple4.us/</font></u></a> <br><a href="http://bbs.maxpda.com/forum-190-1.html" target=_blank><u><font color=#0000ff>http://bbs.maxpda.com/forum-190-1.html</font></u></a> <br><a href="http://lordhong.javaeye.com/blog/153315" target=_blank><u><font color=#0000ff>http://lordhong.javaeye.com/blog/153315</font></u></a> <br><a href="http://lordhong.javaeye.com/blog/152774" target=_blank><u><font color=#0000ff>http://lordhong.javaeye.com/blog/152774</font></u></a> <br><br>9． 其它Feather phone平台 <br>其它feather phone平台，如TI、飞利浦、英飞凌（Infineon）、飞思卡尔（Freescale）、Broadcom、Skyworks等平台，由于平台私有，并且不提供第三方sdk，所以也没有相关资料和文档，希望有了解的朋友介绍一下。</div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cppblog.com/gtwdaizi/aggbug/47094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2008-04-15 09:31 <a href="http://www.cppblog.com/gtwdaizi/articles/47094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[J2ME POLISH]关于运行polish的menu实例的问题</title><link>http://www.cppblog.com/gtwdaizi/articles/45299.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Mon, 24 Mar 2008 11:46:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/45299.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/45299.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/45299.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/45299.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/45299.html</trackback:ping><description><![CDATA[<p>我在运行menu的实例的时候出现下面的错误:<br><br>Buildfile: F:\MobileToDVR\menu\build.xml<br>init:<br>j2mepolish:<br>[j2mepolish] J2ME Polish 2.0-RC4 (GPL License)<br>[j2mepolish] Loading device database...<br>[j2mepolish] Processing [7] devices...<br>[j2mepolish] Building application for [Generic/Midp2Cldc11] (1/7):<br>[j2mepolish] Using locale [de_DE]...<br>[j2mepolish] assembling resources for device [Generic/Midp2Cldc11].<br>[j2mepolish] preprocessing for device [Generic/Midp2Cldc11].<br>[j2mepolish] processing locale code...<br>[j2mepolish] compiling for device [Generic/Midp2Cldc11].<br>[j2mepolish-javac-Generic/Midp2Cldc11] Compiling 202 source files to F:\MobileToDVR\menu\build\real\Generic\Midp2Cldc11\de_DE\classes<br>&nbsp;&nbsp;&nbsp; [javac] Internal J2ME Polish class: F:\MobileToDVR\menu\build\real\Generic\Midp2Cldc11\de_DE\source\StyleSheet.java:291: 找不到符号<br>&nbsp;&nbsp;&nbsp; [javac] 符号： 类 CarrouselContainerView<br>&nbsp;&nbsp;&nbsp; [javac] 位置： 类 StyleSheet<br>&nbsp;&nbsp;&nbsp; [javac] , new Object[]{ new CarrouselContainerView(), mainscreenfocusedStyle}<br>&nbsp;&nbsp;&nbsp; [javac] ^<br>&nbsp;&nbsp;&nbsp; [javac] Internal J2ME Polish class: F:\MobileToDVR\menu\build\real\Generic\Midp2Cldc11\de_DE\source\StyleSheet.java:327: 找不到符号<br>&nbsp;&nbsp;&nbsp; [javac] 符号： 类 CarrouselContainerView<br>&nbsp;&nbsp;&nbsp; [javac] 位置： 类 StyleSheet<br>&nbsp;&nbsp;&nbsp; [javac] , new Object[]{ new CarrouselContainerView(), mainscreenfocusedStyle}<br>&nbsp;&nbsp;&nbsp; [javac] ^<br>&nbsp;&nbsp;&nbsp; [javac] 2 错误<br>&nbsp;&nbsp;&nbsp; [javac] An internal class of J2ME Polish could not be compiled. Please try a clean rebuild by either calling "ant clean j2mepolish" or by removing the working directory "F:\MobileToDVR\menu\build\real".<br>&nbsp;&nbsp;&nbsp; [javac] When an API-class was not found, you might need to define where to find the device-APIs. Following classpath has been used: [D:\Program Files\J2ME-Polish\import\midp-2.0.jar;D:\Program Files\J2ME-Polish\import\cldc-1.1.jar;].</p>
<p>BUILD FAILED<br>F:\MobileToDVR\menu\build.xml:89: Unable to compile source code for device [Generic/Midp2Cldc11]: Compile failed; see the compiler error output for details.</p>
<p>Total time: 8 seconds<br><br>调试了半天也没有找到原因, 后来到官方网站上面下载了一个新版本的J2ME-POLISH(j2mepolish-2.0.1.jar), 然后就正确运行了, 我原来安装的是J2ME Polish 2.0-RC4版本.</p>
<img src ="http://www.cppblog.com/gtwdaizi/aggbug/45299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2008-03-24 19:46 <a href="http://www.cppblog.com/gtwdaizi/articles/45299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[J2ME]开发 J2ME 应用程序 FAQ 一</title><link>http://www.cppblog.com/gtwdaizi/articles/44348.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Mon, 17 Mar 2008 07:45:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/44348.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/44348.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/44348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/44348.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/44348.html</trackback:ping><description><![CDATA[<span style="COLOR: #0000ff">Q:java.lang.OutOfMemoryError: b: Maximum byte code length (32kB) exceeded <br></span><br>R:由于.java文件的大小超过了32kB, 在模拟器中会报这样的错误. 在真机上面好像没有这样的问题, 但是也要注意这样的情况, 不能让一个类的长度过大.<br><br>A:把一个类分成多个小类的来处理. <br><br><span style="COLOR: #0000ff">Q:在模拟器中操作文件的时候, 如何取消"is it ok to write local files"对话框?<br><br><font color=#000000>R:进入Preferences-&gt;Security, securiy policy选择JTWI, security domain选择trusted.<br><br>A:过滤安全的认证.</font></span> <br><br><span style="COLOR: #0000ff">Q:如何读取JAD文件中的属性?<br><br><font color=#000000>A:通过getProperty()方法可以获取.</font><br></span>
<img src ="http://www.cppblog.com/gtwdaizi/aggbug/44348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2008-03-17 15:45 <a href="http://www.cppblog.com/gtwdaizi/articles/44348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关手机中文问题传输的解决办法</title><link>http://www.cppblog.com/gtwdaizi/articles/44373.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Thu, 13 Mar 2008 07:21:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/44373.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/44373.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/44373.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/44373.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/44373.html</trackback:ping><description><![CDATA[<div class=post_content>
<h5><span style="FONT-SIZE: 14pt; COLOR: red">服务器到客户端：<br></span>----------------------------------------------------------------------<br>下面代码是服务器端把字符写到Client端，经过gbEncoding()方法，所有的字符编码成：\uXXXX.<br>----------------------------------------------------------------------<br><br><br>代码:--------------------------------------------------------------------------------<br>/**<br>* Write the String data<br>*<br>* @param out<br>* @param value<br>*/<br>public static void writeUnicode(final DataOutputStream out, final String value) throws ActionException {<br>try {<br>final String unicode = StringFormatter.gbEncoding( value );<br>final byte[] data = unicode.getBytes();<br>final int dataLength = data.length;<br><br>System.out.println( "Data Length is: " + dataLength );<br>System.out.println( "Data is: " + value );<br>out.writeInt( dataLength );<br>out.write( data, 0, dataLength );<br>} catch (IOException e) {<br>throw new ActionException( IMDefaultAction.class.getName(), e.getMessage() );<br>}<br>}<br>--------------------------------------------------------------------------------<br><br>----------------------------------------------------------------------<br>以下代码是gbEncoding()方法，把双字节字符转换成\uXXXX,ASIIC码在前面补00。<br>----------------------------------------------------------------------<br>/**<br>* This method will encode the String to unicode.<br>*<br>* @param gbString<br>* @return<br>*/<br><br>代码:--------------------------------------------------------------------------------<br>public static String gbEncoding( final String gbString ) {<br>char[] utfBytes = gbString.toCharArray();<br>String unicodeBytes = "";<br>for( int byteIndex = 0; byteIndex &lt; utfBytes.length; byteIndex ++ ) {<br>String hexB = Integer.toHexString( utfBytes[ byteIndex ] );<br>if( hexB.length() &lt;= 2 ) {<br>hexB = "00" + hexB;<br>}<br>unicodeBytes = unicodeBytes + "\u" + hexB;<br>}<br>System.out.println( "unicodeBytes is: " + unicodeBytes );<br>return unicodeBytes;<br>}<br>--------------------------------------------------------------------------------<br><br>----------------------------------------------------------------------<br>在客户端收到服务器的数据，先将其一个一个字符解码。双字节显示正常。<br>----------------------------------------------------------------------<br><br>代码:--------------------------------------------------------------------------------<br>/**<br>* This method will decode the String to a recognized String<br>* in ui.<br>* @param dataStr<br>* @return<br>*/<br>private StringBuffer decodeUnicode( final String dataStr ) {<br>int start = 0;<br>int end = 0;<br>final StringBuffer buffer = new StringBuffer();<br>while( start &gt; -1 ) {<br>end = dataStr.indexOf( "\u", start + 2 );<br>String charStr = "";<br>if( end == -1 ) {<br>charStr = dataStr.substring( start + 2, dataStr.length() );<br>} else {<br>charStr = dataStr.substring( start + 2, end);<br>}<br>char letter = (char) Integer.parseInt( charStr, 16 ); // 16进制parse整形字符串。<br>buffer.append( new Character( letter ).toString() );<br>start = end;<br>}<br>return buffer;<br>}<br>--------------------------------------------------------------------------------<br><br>----------------------------------------------------------------------<br><span style="FONT-SIZE: 14pt; COLOR: red">客户端到服务器：</span><br>----------------------------------------------------------------------<br>客户端使用下面方法把手机端的字符编码成ISO-8859-1,传给服务器。<br>----------------------------------------------------------------------<br><br>代码:-------------------------------------------------------------------------------- <br>/**<br>* write the String data<br>* @param value<br>* @param outData<br>*/<br>private void writeSjis(DataOutputStream outData, String value) {<br>try {<br>byte[] data = null;<br>// data = ( value ).getBytes( "UTF-8" );<br>data = ( value ).getBytes( "ISO8859_1" );<br>outData.writeInt(data.length);<br>outData.write(data, 0, data.length);<br><br>System.out.println(" data.length: " + data.length);<br>System.out.println(" data.value: " + value);<br>} catch (Exception ex) {<br>System.out.println(" write error ");<br>ex.printStackTrace();<br>}<br>}<br>--------------------------------------------------------------------------------<br><br>----------------------------------------------------------------------<br>服务器端收到客户端字符流，是用下面方法将其转为UTF-8，以后的操作都是基于UTF-8编码。SQLServer可能会由于内吗不通有不同的变换，所以存取数据库是还要是具体的DB内码作相应的处理。<br>----------------------------------------------------------------------<br><br>代码:--------------------------------------------------------------------------------<br>/**<br>*<br>* @param iso<br>* @return<br>*/<br>public static String isoToUtf( final String iso ) {<br>String utfString = iso;<br>if( iso != null ) {<br>try {<br>utfString = new String( iso.getBytes( "ISO-8859-1" ), "UTF-8" );<br>} catch ( UnsupportedEncodingException e ) {<br>utfString = iso;<br>}<br>} else {<br>utfString = "";<br>}<br>return utfString;<br>}<br><br><br>注：<br>本方法应该不是最有效的，但是只要手机支持unicode的gb2312编码，应该都可以显示正常。<br>不正之处，请各位到:http://www.ebds.com.cn/bbs/讨论讨论。 <br></h5>
</div>
<img src ="http://www.cppblog.com/gtwdaizi/aggbug/44373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2008-03-13 15:21 <a href="http://www.cppblog.com/gtwdaizi/articles/44373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于在N95中,手机重启后,安装的JAVA软件就不能启动</title><link>http://www.cppblog.com/gtwdaizi/articles/37898.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Thu, 13 Mar 2008 03:24:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/37898.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/37898.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/37898.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/37898.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/37898.html</trackback:ping><description><![CDATA[<blockquote>
<p align=left>现象:<br>安装JAVA应用程序后,手机重启后,安装的程序就打不开.<br></p>
<table style="WIDTH: 320px; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>
            <p>CLDC标准</p>
            <p>安装目录</p>
            </td>
            <td>CLDC1.0</td>
            <td>CLDC1.1</td>
        </tr>
        <tr>
            <td>手机存储</td>
            <td>重启后可用</td>
            <td>重启后可用</td>
        </tr>
    </tbody>
</table>
<table style="WIDTH: 320px; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>存储卡存储</td>
            <td>重启后不可用</td>
            <td>重启后可用</td>
        </tr>
    </tbody>
</table>
</blockquote>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以上的情况, 是在存储卡没有设定密码的环境下. 若存储卡设定了密码, 不管是CLDC1.0还是CLDC1.1,重启手机后, 安装到存储卡上面的应用程序均不可用. 在有些情况下, 需要给存储卡先设定一密码, 然后再删除密码.<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;原因分析:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.程序安装的路径是安装在扩展卡上面.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.支持的CLDC1.0和CLDC1.1标准不一样<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解决方法:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.使用较低的标准, 把CLDC1.1的应用程序编译为CLDC1.0的程序<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<img src ="http://www.cppblog.com/gtwdaizi/aggbug/37898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2008-03-13 11:24 <a href="http://www.cppblog.com/gtwdaizi/articles/37898.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[J2ME]关于使用J2ME打静态包&amp;混淆keep的指定方式</title><link>http://www.cppblog.com/gtwdaizi/articles/43646.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Tue, 04 Mar 2008 01:40:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/43646.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/43646.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/43646.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/43646.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/43646.html</trackback:ping><description><![CDATA[<span style="COLOR: red"><strong>Q1 :</strong></span><br>最近在做一个工程, 要使用音视频解码. 其他部门给我分别提供了视频解码库和音频解码库, 我想把这两个混淆打在一起形成一个统一的音视频解码库. 在进行混淆打包的时候会出现很多警告信息, 而仅仅打入一个包的时候却没有问题..<br><br><span style="COLOR: red"><strong>A1:</strong></span><br>问题出现的原因是: 音频和视频解码库是两个分别的jar, 也都是混淆的, 这样导致了这两个包里面都有a.class, b.class等等. 导致有类同名的问题存在..让底层重新打包一次问题就解决了 <br><br>Q2:<br>在混淆的时候需要指定keep参数, 即不参与混淆的类, 其实这些类就是提供给上层应用的接口.<br>开始我是使用以下方式来指定keep参数的:<br>public class com.hik.decoder.*<br>但是发现打包后的结果是导入的jar都没有打到这个生成的jar里面, 导致生成的jar只有2-3k..<br><br>后来发现正确的指定的keep参数的方式还是需要乖乖的输入每个要keep的类, like following:<br><br>class com.hik.decoder.CLASS1{public *;}<br>class com.hik.decoder.CLASS2{public *;}<br>class com.hik.decoder.CLASS3{public *;}<br>class com.hik.decoder.CLASS4{public *;} 
<img src ="http://www.cppblog.com/gtwdaizi/aggbug/43646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2008-03-04 09:40 <a href="http://www.cppblog.com/gtwdaizi/articles/43646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>音频编解码标准</title><link>http://www.cppblog.com/gtwdaizi/articles/41884.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Fri, 25 Jan 2008 05:29:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/41884.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/41884.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/41884.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/41884.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/41884.html</trackback:ping><description><![CDATA[<dd>
<div><br><span style="COLOR: red">PCMU(G.711U)<br></span>类型：Audio<br>制定者：ITU-T<br>所需频宽：64Kbps(90.4)<br>特性：PCMU和PCMA都能提供较好的语音质量，但是它们占用的带宽较高，需要64kbps。<br>优点：语音质量优<br>缺点：占用的带宽较高<br>应用领域：voip<br>版税方式：Free<br>备注：PCMU and PCMA都能够达到CD音质，但是它们消耗的带宽也最多(64kbps)。如果网络带宽比较低，可以选用低比特速率的编码方法，如G.723或G.729，这两种编码的方法也能达到传统长途电话的音质，但是需要很少的带宽（G723需要5.3/6.3kbps，G729需要8kbps）。如果带宽足够并且需要更好的语音质量，就使用PCMU 和 PCMA，甚至可以使用宽带的编码方法G722(64kbps)，这可以提供有高保真度的音质。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br><br><span style="COLOR: red">PCMA(G.711A)<br></span>类型：Audio<br>制定者：ITU-T<br>所需频宽：64Kbps(90.4)<br>特性：PCMU和PCMA都能提供较好的语音质量，但是它们占用的带宽较高，需要64kbps。<br>优点：语音质量优<br>缺点：占用的带宽较高<br>应用领域：voip<br>版税方式：Free<br>备注：PCMU and PCMA都能够达到CD音质，但是它们消耗的带宽也最多(64kbps)。如果网络带宽比较低，可以选用低比特速率的编码方法，如G.723或G.729，这两种编码的方法也能达到传统长途电话的音质，但是需要很少的带宽（G723需要5.3/6.3kbps，G729需要8kbps）。如果带宽足够并且需要更好的语音质量，就使用PCMU 和 PCMA，甚至可以使用宽带的编码方法G722(64kbps)，这可以提供有高保真度的音质。</div>
<dt>&nbsp;
<dd>
<div><br><span style="COLOR: red">ADPCM(自适应差分PCM)<br></span>类型：Audio<br>制定者：ITU-T<br>所需频宽：32Kbps<br>特性：ADPCM(adaptive difference pulse code modulation)综合了APCM的自适应特性和DPCM系统的差分特性，是一种性能比较好的波形编码。它的核心想法是：<br>&nbsp; &nbsp;&nbsp; &nbsp; ①利用自适应的思想改变量化阶的大小，即使用小的量化阶(step-size)去编码小的差值，使用大的量化阶去编码大的差值；<br>&nbsp; &nbsp;&nbsp; &nbsp; ②使用过去的样本值估算下一个输入样本的预测值，使实际样本值和预测值之间的差值总是最小。<br>优点：算法复杂度低，压缩比小（CD音质&gt;400kbps），编解码延时最短（相对其它技术）<br>缺点：声音质量一般<br>应用领域：voip<br>版税方式：Free<br>备注：ADPCM (ADPCM Adaptive Differential Pulse Code Modulation), 是一种针对 16bit (或者更高?) 声音波形数据的一种有损压缩算法, 它将声音流中每次采样的 16bit 数据以 4bit 存储, 所以压缩比 1:4. 而压缩/解压缩算法非常的简单, 所以是一种低空间消耗,高质量声音获得的好途径。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br><br><span style="COLOR: red">LPC(Linear Predictive Coding，线性预测编码)<br></span>类型：Audio<br>制定者： <br>所需频宽：2Kbps-4.8Kbps<br>特性：压缩比大，计算量大，音质不高，廉价<br>优点：压缩比大,廉价<br>缺点：计算量大，语音质量不是很好，自然度较低<br>应用领域：voip<br>版税方式：Free<br>备注：参数编码又称为声源编码，是将信源信号在频率域或其它正交变换域提取特征参数，并将其变换成数字代码进行传输。译码为其反过程，将收到的数字序列经变换恢复特征参量，再根据特征参量重建语音信号。具体说，参数编码是通过对语音信号特征参数的提取和编码，力图使重建语音信号具有尽可能高的准确性，但重建信号的波形同原语音信号的波形可能会有相当大的差别。如：线性预测编码（LPC）及其它各种改进型都属于参数编码。该编码比特率可压缩到2Kbit/s-4.8Kbit/s，甚至更低，但语音质量只能达到中等，特别是自然度较低。</div>
<dt>&nbsp;
<dd>
<div><br><span style="COLOR: red">CELP(Code Excited Linear Prediction，码激励线性预测编码)<br></span>类型：Audio<br>制定者：欧洲通信标准协会（ETSI）<br>所需频宽：4～16Kbps的速率<br>特性：改善语音的质量：<br>&nbsp; &nbsp;&nbsp; &nbsp; ① 对误差信号进行感觉加权，利用人类听觉的掩蔽特性来提高语音的主观质量；<br>&nbsp; &nbsp;&nbsp; &nbsp; ②用分数延迟改进基音预测，使浊音的表达更为准确，尤其改善了女性语音的质量；<br>&nbsp; &nbsp;&nbsp; &nbsp; ③ 使用修正的MSPE准则来寻找 &#8220;最佳&#8221;的延迟，使得基音周期延迟的外形更为平滑；<br>&nbsp; &nbsp;&nbsp; &nbsp; ④根据长时预测的效率，调整随机激励矢量的大小，提高语音的主观质量；&nbsp; &nbsp;&nbsp; &nbsp; ⑤ 使用基于信道错误率估计的自适应平滑器，在信道误码率较高的情况下也能合成自然度较高的语音。<br>&nbsp; &nbsp;&nbsp; &nbsp; 结论：<br>&nbsp; &nbsp;&nbsp; &nbsp; ① CELP算法在低速率编码环境下可以得到令人满意的压缩效果；<br>&nbsp; &nbsp;&nbsp; &nbsp; ②使用快速算法，可以有效地降低CELP算法的复杂度，使它完全可以实时地实现；<br>&nbsp; &nbsp;&nbsp; &nbsp; ③CELP可以成功地对各种不同类型的语音信号进行编码，这种适应性对于真实环境，尤其是背景噪声存在时更为重要。<br>优点：用很低的带宽提供了较清晰的语音<br>缺点：<br>应用领域：voip<br>版税方式：Free<br>备注：1999年欧洲通信标准协会（ETSI）推出了基于码激励线性预测编码（CELP）的第三代移动通信语音编码标准自适应多速率语音编码器（AMR），其中最低速率为4.75kb/s，达到通信质量。CELP 码激励线性预测编码是Code Excited Linear Prediction的缩写。CELP是近10年来最成功的语音编码算法。<br>&nbsp; &nbsp;&nbsp; &nbsp; CELP语音编码算法用线性预测提取声道参数，用一个包含许多典型的激励矢量的码本作为激励参数，每次编码时都在这个码本中搜索一个最佳的激励矢量，这个激励矢量的编码值就是这个序列的码本中的序号。<br>&nbsp; &nbsp;&nbsp; &nbsp; CELP已经被许多语音编码标准所采用，美国联邦标准FS1016就是采用CELP的编码方法，主要用于高质量的窄带语音保密通信。CELP (Code-Excited Linear Prediction) 这是一个简化的 LPC 算法，以其低比特率著称 (4800-9600Kbps)，具有很清晰的语音品质和很高的背景噪音免疫性。CELP是一种在中低速率上广泛使用的语音压缩编码方案。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br><br><span style="COLOR: red">G.711<br></span>类型：Audio<br>制定者：ITU-T<br>所需频宽：64Kbps<br>特性：算法复杂度小，音质一般<br>优点：算法复杂度低，压缩比小（CD音质&gt;400kbps），编解码延时最短（相对其它技术）<br>缺点：占用的带宽较高<br>应用领域：voip<br>版税方式：Free<br>备注：70年代CCITT公布的G.711 64kb/s脉冲编码调制PCM。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br><br><span style="COLOR: red">G.721</span><br>类型：Audio<br>制定者：ITU-T<br>所需频宽：32Kbps<br>特性：相对于PCMA和PCMU，其压缩比较高，可以提供2：1的压缩比。<br>优点：压缩比大<br>缺点：声音质量一般<br>应用领域：voip<br>版税方式：Free<br>备注：子带ADPCM（SB-ADPCM）技术。G.721标准是一个代码转换系统。它使用ADPCM转换技术，实现64 kb/s A律或&#956;律PCM速率和32 kb/s速率之间的相互转换。</div>
<dt>&nbsp;
<dd>
<div><br><span style="COLOR: red">G.722</span><br>类型：Audio<br>制定者：ITU-T<br>所需频宽：64Kbps<br>特性：G722能提供高保真的语音质量<br>优点：音质好<br>缺点：带宽要求高<br>应用领域：voip<br>版税方式：Free<br>备注：子带ADPCM（SB-ADPCM）技术<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br><br><span style="COLOR: red">G.723(低码率语音编码算法)<br></span>类型：Audio<br>制定者：ITU-T<br>所需频宽：5.3Kbps/6.3Kbps<br>特性：语音质量接近良，带宽要求低，高效实现，便于多路扩展，可利用C5402片内16kRAM实现53coder。达到ITU-TG723要求的语音质量，性能稳定。可用于IP电话语音信源编码或高效语音压缩存储。<br>优点：码率低，带宽要求较小。并达到ITU-TG723要求的语音质量，性能稳定。<br>缺点：声音质量一般<br>应用领域：voip<br>版税方式：Free<br>备注：G.723语音编码器是一种用于多媒体通信，编码速率为5.3kbits/s和6.3kbit/s的双码率编码方案。G.723标准是国际电信联盟（ITU）制定的多媒体通信标准中的一个组成部分，可以应用于IP电话等系统中。其中，5.3kbits/s码率编码器采用多脉冲最大似然量化技术（MP－MLQ），6.3kbits/s码率编码器采用代数码激励线性预测技术。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br><br><span style="COLOR: red">G.723.1(双速率语音编码算法)<br></span>类型：Audio<br>制定者：ITU-T<br>所需频宽：5.3Kbps(22.9)<br>特性：能够对音乐和其他音频信号进行压缩和解压缩，但它对语音信号来说是最优的。G.723.1采用了执行不连续传输的静音压缩，这就意味着在静音期间的比特流中加入了人为的噪声。除了预留带宽之外，这种技术使发信机的调制解调器保持连续工作，并且避免了载波信号的时通时断。<br>优点：码率低，带宽要求较小。并达到ITU-TG723要求的语音质量，性能稳定,避免了载波信号的时通时断。<br>缺点：语音质量一般<br>应用领域：voip<br>版税方式：Free<br>备注：G.723.1算法是 ITU-T建议的应用于低速率多媒体服务中语音或其它音频信号的压缩算法，其目标应用系统包括H.323、H.324等多媒体通信系统 。目前该算法已成为IP电话系统中的必选算法之一。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br><br><span style="COLOR: red">G.728<br></span>类型：Audio<br>制定者：ITU-T<br>所需频宽：16Kbps/8Kbps<br>特性：用于IP电话、卫星通信、语音存储等多个领域。G.728是一种低时延编码器，但它比其它的编码器都复杂，这是因为在编码器中必须重复做50阶LPC分析。G.728还采用了自适应后置滤波器来提高其性能。<br>优点：后向自适应，采用自适应后置滤波器来提高其性能<br>缺点：比其它的编码器都复杂<br>应用领域：voip<br>版税方式：Free<br>备注：G.728 16kb/s短延时码本激励线性预测编码（LD-CELP）。1996年ITU公布了G.728 8kb/s的CS－ACELP算法，可以用于IP电话、卫星通信、语音存储等多个领域。16 kbps G.728低时延码激励线性预测。 <br>&nbsp; &nbsp;&nbsp; &nbsp; G.728是低比特线性预测合成分析编码器（G.729和G.723.1）和后向ADPCM编码器的混合体。G.728是LD-CELP编码器，它一次只处理5个样点。对于低速率（56~128 kbps）的综合业务数字网（ISDN）可视电话，G.728是一种建议采用的语音编码器。由于其后向自适应特性，因此G.728是一种低时延编码器，但它比其它的编码器都复杂，这是因为在编码器中必须重复做50阶LPC分析。G.728还采用了自适应后置滤波器来提高其性能。</div>
<dt>&nbsp;
<dd>
<div><br><span style="COLOR: red">G.729<br></span>类型：Audio<br>制定者：ITU-T<br>所需频宽：8Kbps<br>特性：在良好的信道条件下要达到长话质量，在有随机比特误码、发生帧丢失和多次转接等情况下要有很好的稳健性等。这种语音压缩算法可以应用在很广泛的领域中，包括ＩＰ电话、无线通信、数字卫星系统和数字专用线路。<br>&nbsp; &nbsp;&nbsp; &nbsp; G.729算法采用&#8220;共轭结构代数码本激励线性预测编码方案&#8221;（CS-ACELP）算法。这种算法综合了波形编码和参数编码的优点，以自适应预测编码技术为基础，采用了矢量量化、合成分析和感觉加权等技术。<br>&nbsp; &nbsp;&nbsp; &nbsp; G.729编码器是为低时延应用设计的，它的帧长只有10ms，处理时延也是10ms，再加上5ms的前视，这就使得G.729产生的点到点的时延为25ms，比特率为8 kbps。<br>优点：语音质量良，应用领域很广泛，采用了矢量量化、合成分析和感觉加权，提供了对帧丢失和分组丢失的隐藏处理机制<br>缺点：在处理随机比特错误方面性能不好。<br>应用领域：voip<br>版税方式：Free<br>备注：国际电信联盟（ITU-T）于1995年11月正式通过了G.729。 ITU-T建议G.729也被称作&#8220;共轭结构代数码本激励线性预测编码方案&#8221;(CS-ACELP)，它是当前较新的一种语音压缩标准。G.729是由美国、法国、日本和加拿大的几家著名国际电信实体联合开发的。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br><br><span style="COLOR: red">G.729A<br></span>类型：Audio<br>制定者：ITU-T<br>所需频宽：8Kbps(34.4)<br>特性：复杂性较G.729低，性能较G.729差。<br>优点：语音质量良，降低了计算的复杂度以便于实时实现，提供了对帧丢失和分组丢失的隐藏处理机制<br>缺点：性能较G.729差<br>应用领域：voip<br>版税方式：Free<br>备注：96年ITU-T又制定了G.729的简化方案G.729A，主要降低了计算的复杂度以便于实时实现，因此目前使用的都是G.729A。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br><br><span style="COLOR: red">GIPS<br></span>类型：Audio<br>制定者：瑞典Global IP Sound公司<br>所需频宽：<br>特性：GIPS技术可根据带宽状况自动调节编码码率，提供低码率高质量的音频。GIPS的核心技术（网络自适应算法，丢包补偿算法和回声消除算法）可很好地解决语音延迟与回声问题，带来完美音质，提供比电话还清晰的语音通话效果。<br>优点：很好地解决语音延迟与回声问题，带来完美音质，提供比电话还清晰的语音通话效果<br>缺点： 不是Free<br>应用领域：voip<br>版税方式：每年支付一笔使用权费用<br>备注：GIPS音频技术是由来自瑞典的全球顶尖的语音处理高科技公司--"GLOBAL IP SOUND"提供的专用于互联网的语音压缩引擎系统。GIPS技术可根据带宽状况自动调节编码码率，提供低码率高质量的音频。GIPS的核心技术（网络自适应算法，丢包补偿算法和回声消除算法）可很好地解决语音延迟与回声问题，带来完美音质，提供比电话还清晰的语音通话效果。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br><br><span style="COLOR: red">Apt-X</span><br>类型：Audio<br>制定者：Audio Processing Technology 公司<br>所需频宽：10Hz to 22.5 kHz，56kbit/s to 576 kbit/s(16 bit 7.5 kHz mono to 24-bit, 22.5kHz stereo)<br>特性：主要用于专业音频领域，提供高品质的音频。其特点是：<br>&nbsp; &nbsp;&nbsp; &nbsp; ①采用4:1:4的压缩与放大方案；<br>&nbsp; &nbsp;&nbsp; &nbsp; ②硬件低复杂度；<br>&nbsp; &nbsp;&nbsp; &nbsp; ③极低的编码延迟；<br>&nbsp; &nbsp;&nbsp; &nbsp; ④由单芯片实现；<br>&nbsp; &nbsp;&nbsp; &nbsp; ⑤单声道或立体声编解码；<br>&nbsp; &nbsp;&nbsp; &nbsp; ⑥只需单设备即可实现22.5kHz的双通道立体声；<br>&nbsp; &nbsp;&nbsp; &nbsp; ⑦高达48kHz的采样频率；<br>&nbsp; &nbsp;&nbsp; &nbsp; ⑧容错性好；<br>&nbsp; &nbsp;&nbsp; &nbsp; ⑨完整的AUTOSYNC&#8482;编解码同步方案；<br>&nbsp; &nbsp;&nbsp; &nbsp; ⑩低功率消耗<br>优点：高品质的音频，硬件复杂度低，设备要求低<br>缺点：不是Free<br>应用领域：voip<br>版税方式：一次性付费<br>备注：子带ADPCM（SB-ADPCM）技术</div>
<dt>&nbsp;
<dd>
<div><br><span style="COLOR: red">NICAM(Near Instantaneous Companded Audio Multiplex 准瞬时压扩音频复用)<br></span>类型：Audio<br>制定者：英国BBC广播公司<br>所需频宽：728Kbps<br>特性：应用范围及其广泛，可用它进行立体声或双语广播<br>优点：应用范围及其广泛，信噪比高，动态范围宽、音质同CD相媲美，故名丽音，因此NICAM又称为丽音<br>缺点：不是Free，频宽要求高<br>应用领域：voip<br>版税方式：一次性付费<br>备注：NICAM也称丽音，它是英文Near-Instantaneously Companded Audio Multiplex的缩写，其含义为准瞬时压扩音频复用，是由英国BBC广播公司开发研究成功的。<br>&nbsp; &nbsp;&nbsp; &nbsp; 通俗地说NICAM技术实际上就是双声道数字声技术，其应用范围及其广泛，最典型的应用便是电视广播附加双声道数字声技术，利用它进行立体声或双语广播，以充分利用电视频道的频谱资源。这是在常规电视广播的基础上无需增加许多投资就可以实现的。在进行立体声广播时，它提高了音频的信号质量，使其接近CD的质量。而且还可以利用NICAM技术进行高速数据广播及其他数据传输的增殖服务，这在当今的信息化社会中似乎就显得尤为重要了！<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br><br><span style="COLOR: red">MPEG-1 audio layer 1</span><br>类型：Audio<br>制定者：MPEG<br>所需频宽：384kbps（压缩4倍）<br>特性：编码简单，用于数字盒式录音磁带，2声道，VCD中使用的音频压缩方案就是MPEG-1层Ⅰ。<br>优点：压缩方式相对时域压缩技术而言要复杂得多，同时编码效率、声音质量也大幅提高，编码延时相应增加。可以达到&#8220;完全透明&#8221;的声音质量（EBU音质标准）<br>缺点：频宽要求较高<br>应用领域：voip<br>版税方式：Free<br>备注：MPEG-1声音压缩编码是国际上第一个高保真声音数据压缩的国际标准，它分为三个层次：<br>--层1(Layer 1)：编码简单，用于数字盒式录音磁带<br>--层2(Layer 2)：算法复杂度中等，用于数字音频广播(DAB)和VCD等<br>--层3(Layer 3)：编码复杂，用于互联网上的高质量声音的传输，如MP3音乐压缩10倍<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br><br><span style="COLOR: red">MUSICAM(MPEG-1 audio layer 2,即MP2)</span><br>类型：Audio<br>制定者：MPEG<br>所需频宽：256～192kbps（压缩6～8倍）<br>特性：算法复杂度中等，用于数字音频广播(DAB)和VCD等，2声道，而MUSICAM由于其适当的复杂程度和优秀的声音质量，在数字演播室、DAB、DVB等数字节目的制作、交换、存储、传送中得到广泛应用。<br>优点：压缩方式相对时域压缩技术而言要复杂得多，同时编码效率、声音质量也大幅提高，编码延时相应增加。可以达到&#8220;完全透明&#8221;的声音质量（EBU音质标准）<br>缺点：<br>应用领域：voip<br>版税方式：Free<br>备注：同MPEG-1 audio layer 1<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br><br><span style="COLOR: red">MP3(MPEG-1 audio layer 3)<br></span>类型：Audio<br>制定者：MPEG<br>所需频宽：128～112kbps（压缩10～12倍）<br>特性：编码复杂，用于互联网上的高质量声音的传输，如MP3音乐压缩10倍，2声道。MP3是在综合MUSICAM和ASPEC的优点的基础上提出的混合压缩技术，在当时的技术条件下，MP3的复杂度显得相对较高，编码不利于实时，但由于MP3在低码率条件下高水准的声音质量，使得它成为软解压及网络广播的宠儿。<br>优点：压缩比高，适合用于互联网上的传播<br>缺点：MP3在128KBitrate及以下时，会出现明显的高频丢失<br>应用领域：voip<br>版税方式：Free<br>备注：同MPEG-1 audio layer 1<br><br><span style="COLOR: red">MPEG-2 audio layer</span><br>类型：Audio<br>制定者：MPEG<br>所需频宽：与MPEG-1层1，层2，层3相同<br>特性：MPEG-2的声音压缩编码采用与MPEG-1声音相同的编译码器，层1, 层2和层3的结构也相同，但它能支持5.1声道和7.1声道的环绕立体声。<br>优点：支持5.1声道和7.1声道的环绕立体声<br>缺点：<br>应用领域：voip<br>版税方式：按个收取<br>备注：MPEG-2的声音压缩编码采用与MPEG-1声音相同的编译码器，层1, 层2和层3的结构也相同，但它能支持5.1声道和7.1声道的环绕立体声。</div>
<dt>&nbsp;
<dd>
<div><br><span style="COLOR: red">AAC(Advanced Audio Coding，先进音频编码)<br></span>类型：Audio<br>制定者：MPEG<br>所需频宽：96-128 kbps<br>特性：AAC可以支持1到48路之间任意数目的音频声道组合、包括15路低频效果声道、配音/多语音声道，以及15路数据。它可同时传送16套节目，每套节目的音频及数据结构可任意规定。<br>&nbsp; &nbsp;&nbsp; &nbsp; AAC主要可能的应用范围集中在因特网网络传播、数字音频广播，包括卫星直播和数字AM、以及数字电视及影院系统等方面。AAC使用了一种非常灵活的熵编码核心去传输编码频谱数据。具有48 个主要音频通道，16 个低频增强通道，16 个集成数据流, 16 个配音，16 种编排。<br>优点：支持多种音频声道组合，提供优质的音质<br>缺点： <br>应用领域：voip<br>版税方式：一次性收费<br>备注：AAC于1997年形成国际标准ISO 13818-7。先进音频编码（Advanced Audio Coding--AAC）开发成功，成为继MPEG-2音频标准（ISO/IEC13818-3）之后的新一代音频压缩标准。<br>&nbsp; &nbsp;&nbsp; &nbsp; 在MPEG-2制订的早期，本来是想将其音频编码部分保持与MPEG-1兼容的。但后来为了适应演播电视的要求而将其定义成为一个可以获得更高质量的多声道音频标准。理所当然地，这个标准是不兼容MPEG-1的，因此被称为MPEG-2 AAC。换句话说，从表面上看，要制作和播放AAC，都需要使用与MP3完全不同的工具。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br><br><span style="COLOR: red">Dolby AC-3<br></span>类型：Audio<br>制定者：美国杜比公司<br>所需频宽：64kbps<br>特性：提供的环绕立体声系统由5个全频带声道加一个超低音声道组成，6个声道的信息在制作和还原过程中全部数字化，信息损失很少，细节丰富，具有真正的立体声效果，在数字电视、DVD和家庭影院中广泛使用。<br>优点：环绕立体声，信息损失很少，细节丰富，具有真正的立体声效果<br>缺点：<br>应用领域：voip<br>版税方式：按个收取<br>备注：杜比数字AC-3（Dolby Digital AC-3）：美国杜比公司开发的多声道全频带声音编码系统，它提供的环绕立体声系统由5个全频带声道加一个超低音声道组成，6个声道的信息在制作和还原过程中全部数字化，信息损失很少，细节丰富，具有真正的立体声效果，在数字电视、DVD和家庭影院中广泛使用。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br><br><span style="COLOR: red">ASPEC（Audio Spectral Perceptual Entropy Coding）<br></span>类型：Audio<br>制定者：AT&amp;T<br>所需频宽：64kps<br>特性：音频质量获得显著改善，不过计算复杂度也大大提高，而且在回响、低码率时声音质量严重下降。<br>优点：音频质量获得显著改善<br>缺点：计算复杂度的提高。块边界影响、预计算复杂度的提高。回响、低码率时声音质量严重下降<br>应用领域：voip<br>版税方式：按个收取<br>备注：变换压缩技术<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br><br><span style="COLOR: red">PAC（Perceptual Audio Coder）<br></span>类型：Audio<br>制定者：AT&amp;T<br>所需频宽：64kps<br>特性：音频质量获得显著改善，不过在回响、低码率时声音质量严重下降。<br>优点：音频质量获得显著改善<br>缺点：块边界影响、预回响、低码率时声音质量严重下降<br>应用领域：voip<br>版税方式：按个收取<br>备注：变换压缩技术<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br><br><span style="COLOR: red">HR</span><br>类型：Audio<br>制定者： 飞利浦<br>所需频宽：8Kbps<br>特性：以增加GSM网络容量为目的,但是会损害语音质量;由于现在网络频率紧缺,一些大的运营商已经在大城市密集地带开通此方式以增加容量。<br>优点：系统容量大<br>缺点：语音质量差<br>应用领域：GSM<br>版税方式：按个收费<br>备注：HF半速率,是一种GSM语音编码方式。</div>
<dt>&nbsp;
<dd>
<div><br><span style="COLOR: red">FR<br></span>类型：Audio<br>制定者：飞利浦<br>所需频宽：13Kbps<br>特性：是一般的GSM手机的通信编码方式,可以获得达到4.1左右Qos的语音通信质量(国际电联规定语音通信质量Qos满分为5)<br>优点：语音质量得到了提高<br>缺点：系统容量降低<br>应用领域：GSM<br>版税方式：按个收费<br>备注：FR全速率，是一种GSM语音编码方式。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br><br><span style="COLOR: red">EFR<br></span>类型：Audio<br>制定者：飞利浦<br>所需频宽：13Kbps<br>特性：用于GSM手机基于全速率13Kbps的语音编码和发送,可以获得更好更清晰的语音质量(接近Qos4.7),需要网络服务商开通此项网络功能，手机才能配合实现。<br>优点：音质好<br>缺点：需要网络服务商开通此项网络功能，且系统容量降低<br>应用领域：GSM<br>版税方式：按个收费<br>备注：EFR增强型全速率,一种GSM网络语音的编码方式。</div>
<dt>&nbsp;
<dd>
<div><br><span style="COLOR: red">GSM-AMR(Adaptive Multi-Rate)<br></span>类型：Audio<br>制定者：飞利浦<br>所需频宽：8Kbps(4.75 Kbps~12.2 Kbps)<br>特性： 可以对语音进行替换和消音，平滑噪音，支持间断式传输，对语音进行动态侦查。能在各种网络条件下提供优质的语音效果。<br>优点：音质出色<br>缺点：<br>应用领域：GSM<br>版税方式：按个收费<br>备注：GSM-ASM是一种广泛使用在GPRS和W-CDMA网络上的音频标准。在规范ETSI GSM06.90中对GSM-AMR进行了定义。AMR语音编码是GSM 2+和WCDMA的默认编码标准，是第三代无线通讯系统的语音编码标准。GSM-AMR标准基于ACELP（代数激励线性预测）编码。它能在广泛的传输条件下提供高品质的语音效果。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br><br><span style="COLOR: red">EVRC(Enhanced Variable Rate Coder，增强型可变速率编码器)<br></span>类型：Audio<br>制定者：美国Qualcomm通信公司(即高通)<br>所需频宽：8Kbps或13Kbps<br>特性：支持三种码率（9.6 Kbps, 4.8 Kbps 和 1.2 Kbps），噪声抑制，邮件过滤。能在各种网络条件下提供优质的语音效果。<br>优点：音质出色<br>缺点：<br>应用领域：CDMA<br>版税方式：按个收费<br>备注：EVRC编码广泛使用于CDMA网络。EVRC标准遵循规范TIA IS-127的内容。EVRC编码基于RCELP（松弛码激励线性预测）标准。该编码可以以Rate 1（171bits/packet），Rate 1/2（80bits/packet）或是Rate 1/8（16bits/packet）的容量进行操作。在要求下，它也能产生空包（0bits/packet）。</div>
<dt>&nbsp;
<dd>
<div><br><span style="COLOR: red">QCELP(QualComm Code Excited Linear Predictive，受激线性预测编码)<br></span>类型：Audio<br>制定者：美国Qualcomm通信公司(即高通)<br>所需频宽：8k的语音编码算法(可工作于4/4.8/8/9.6Kbps等固定速率上，而且可变速率地工作于800Kbps～9600Kbps之间)<br>特性：使用适当的门限值来决定所需速率。QCELP是一种8k的语音编码算法(可以在8k的速率下提供接近13k的话音压缩质量)。这是一种可变速率话音编码，根据人的说话特性（大家应该能够体会我们日常的沟通和交流时并不是一直保持某种恒定的方式讲话，有间断、有不同的声音频率等都是人的自然表达）而采取的一种优化技术。<br>优点：话音清晰、背景噪声小，系统容量大<br>缺点： 不是Free<br>应用领域：CDMA<br>版税方式：每年支付一笔使用权费用<br>备注：QCELP，即QualComm Code Excited Linear Predictive（QualComm受激线性预测编码）。美国Qualcomm通信公司的专利语音编码算法，是北美第二代数字移动电话（CDMA）的语音编码标准（IS95）。这种算法不仅可工作于4/4.8/8/9.6kbit／s等固定速率上，而且可变速率地工作于800bit／s～9600bit／s之间。QCELP算法被认为是到目前为止效率效率最高的一种算法，它的主要特点之一，是使用适当的门限值来决定所需速率。I&#8216;1限值懈景噪声电平变化而变化，这样就抑制了背景噪声，使得即使在喧闹的环境中，也能得到良好的话音质量， CDMA8Kbit/s的话音近似GSM 13Mbit/s的话音。CDMA采用QCELP编码等一系列技术，具有话音清晰、背景噪声小等优势，其性能明显 优于其他无线移动通信系统，语音质量可以与有线电话媲美。 无线辐射低。</div>
</dd>
<img src ="http://www.cppblog.com/gtwdaizi/aggbug/41884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2008-01-25 13:29 <a href="http://www.cppblog.com/gtwdaizi/articles/41884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2ME最佳实践之RMS操作</title><link>http://www.cppblog.com/gtwdaizi/articles/41109.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Mon, 14 Jan 2008 01:58:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/41109.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/41109.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/41109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/41109.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/41109.html</trackback:ping><description><![CDATA[<p align=center><strong><font size=4>编写灵活的RMS应用</font></strong></p>
<p>MIDP应用程序的标准持久化方案就是使用RMS。RMS类似于一个小型数据库，RecordStore相当于数据库的表，每个&#8220;表&#8221;由若干记录（Record）构成，一条记录就是一个用int表示的记录号RecordID和用byte[]表示的内容。记录号可以看作是&#8220;主键&#8221;，byte[]数组存储内容。</p>
<p>RMS提供的记录操作可以实现根据ID直接获得记录，或者枚举出一个表中的所有记录。</p>
<p>枚举记录是非常低效的，因为只能比较byte[]数据来确定该记录是否是所需的记录。通过ID获得记录是高效而方便的，类似于SQL语句&#8220;SELECT byteArrayData FROM recordStoreName WHERE RecordID=?&#8221;。然而，通常应用程序很难知道某条记录的ID号，而RMS记录的&#8220;主键&#8221;又仅限于int类型，无法使用其他类型如String作为&#8220;主键&#8221;来查找。因此，对于需要存取不同类型对象的应用程序而言，就需要一个灵活的RMS操作框架。</p>
<p>我们的基本设想是，如果能使用String作为&#8220;主键&#8221;来查找记录，就能非常方便地获得所需的内容。例如，应用程序设置可以通过"sys.settings"获得byte[]数组，并依次读取出设置，用户登录信息可以通过"user.info"获得byte[]数组，再分解出用户名和口令。</p>
<p>因此，我们实现一个StorageHandler类，提供唯一的RMS访问接口，使得其他类完全不必考虑底层的RMS操作，只需提供能标识自身的一个String即可。</p>
<p>如果我们能实现一种类似于数据库索引的查找表，就能根据String关键字查找某条记录。因此，我们使用一个名为"index"的RecordStore来存储所有的索引，每一条索引都指向某一条具体记录的ID，设计一个IndexEntry表示一条索引：</p>
<p><font face="Courier New" color=#008080>class IndexEntry {<br>&nbsp;&nbsp;&nbsp; private int selfId;&nbsp;&nbsp; // IndexEntry的ID<br>&nbsp;&nbsp;&nbsp; private int recordId; // 对应记录的ID<br>&nbsp;&nbsp;&nbsp; private String key;&nbsp;&nbsp; // 访问记录的Key<br>}</font></p>
<p>根据索引查找，分3步进行：</p>
<p>1．在名为"index"的RecordStore中根据String查找对应的IndexEntry。<br>2．取出IndexEntry，获得记录ID号。<br>3．根据ID号获得另一个RecordStore的记录，然后就可以读取、更新和删除该记录。</p>
<p>如下图所示：</p>
<p align=center><img alt="" src="http://www.j2medev.com/Article/UploadFiles/200511/20051106230237687.jpg"></p>
<p>由于IndexEntry保存的数据很少，为了加快查找速度，可以在应用程序启动时，把所有的IndexEntry读入一个Vector，在后面的操作中更新这个Vector并与RecordStore保持同步。</p>
<p>为了处理不同类型的数据，所有可通过StorageHandler存取的类都必须实现一个Storable接口：</p>
<p><font face="Courier New" color=#008080>public interface Storable {<br>&nbsp;&nbsp;&nbsp; String getKey();<br>&nbsp;&nbsp;&nbsp; void getData(DataOutputStream output) throws IOException;<br>&nbsp;&nbsp;&nbsp; void setData(DataInputStream input) throws IOException;<br>}</font></p>
<p>前面已经提到，在MIDP应用程序中，序列化一个类的最佳方法是使用DataInputStream和DataOutputStream。因此，需要持久化的类可以通过getData()和setData()方法非常方便地存取。假定应用程序的类UserInfo保存了用户的登录名、口令和是否自动登录的信息：</p>
<p><font face="Courier New" color=#008080>public class UserInfo {<br>&nbsp;&nbsp;&nbsp; String username;<br>&nbsp;&nbsp;&nbsp; String password;<br>&nbsp;&nbsp;&nbsp; boolean autoLogin;<br>}</font></p>
<p>为了能将UserInfo存入RMS，需要实现Storable接口：</p>
<p><font face="Courier New" color=#008080>class UserInfo implements Storable {<br>&nbsp;&nbsp;&nbsp; String username;<br>&nbsp;&nbsp;&nbsp; String password;<br>&nbsp;&nbsp;&nbsp; boolean autoLogin;<br>&nbsp;&nbsp;&nbsp; public String getKey() { return "user.info"; } // 提供一个唯一标识符即可<br>&nbsp;&nbsp;&nbsp; public void getData(DataOutputStream output) throws IOException {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output.writeUTF(username);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output.writeUTF(password);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output.writeBoolean(autoLogin);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public void setData(DataInputStream input) throws IOException {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username = input.readUTF();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password = input.readUTF();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autoLogin = input.readBoolean();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; // getters here...<br>}</font></p>
<p>要保存UserInfo，只需调用StorageHandler的保存方法：</p>
<p><font face="Courier New" color=#008080>StorageHandler.storeOrUpdate(userinfo);</font></p>
<p>要读取UserInfo，调用StorageHandler的读取方法：</p>
<p><font face="Courier New" color=#008080>UserInfo userinfo = new UserInfo();<br>StorageHandler.load(userinfo);</font></p>
<p>这样，需要读取或保存数据的类完全不必涉及底层的RMS操作，大大简化了应用程序的设计，增强了源代码的可复用性与可维护性。</p>
<img src ="http://www.cppblog.com/gtwdaizi/aggbug/41109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2008-01-14 09:58 <a href="http://www.cppblog.com/gtwdaizi/articles/41109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2ME中的图像处理</title><link>http://www.cppblog.com/gtwdaizi/articles/36209.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Fri, 09 Nov 2007 11:57:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/36209.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/36209.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/36209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/36209.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/36209.html</trackback:ping><description><![CDATA[<p><strong style="FONT-SIZE: 14pt; COLOR: #000080">1.图像缩放</strong><br><strong style="COLOR: #666699">1.1 使用midp2.0的getRGB()函数</strong><br><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;Image&nbsp;ZoomImage(Image&nbsp;src,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;desW,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;desH)&nbsp;{<br>&nbsp;&nbsp;Image&nbsp;desImg&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;srcW&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;src.getWidth();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;原始图像宽</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;srcH&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;src.getHeight();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;原始图像高</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[]&nbsp;srcBuf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[srcW&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;srcH];&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;原始图片像素信息缓存</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;src.getRGB(srcBuf,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;srcW,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;srcW,&nbsp;srcH);<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;计算插值表</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[]&nbsp;tabY&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[desH];<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[]&nbsp;tabX&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[desW];<br><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;sb&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;db&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;tems&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;temd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;distance&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;srcH&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;desH&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;srcH&nbsp;:&nbsp;desH;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;distance;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;垂直方向&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;tabY[db]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sb;<br>&nbsp;&nbsp;&nbsp;tems&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;srcH;<br>&nbsp;&nbsp;&nbsp;temd&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;desH;<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(tems&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;distance)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;tems&nbsp;</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">&nbsp;distance;<br>&nbsp;&nbsp;&nbsp;&nbsp;sb</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(temd&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;distance)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;temd&nbsp;</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">&nbsp;distance;<br>&nbsp;&nbsp;&nbsp;&nbsp;db</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;sb&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;db&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;tems&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;temd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;distance&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;srcW&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;desW&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;srcW&nbsp;:&nbsp;desW;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;distance;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;水平方向&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;tabX[db]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">short</span><span style="COLOR: #000000">)&nbsp;sb;<br>&nbsp;&nbsp;&nbsp;tems&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;srcW;<br>&nbsp;&nbsp;&nbsp;temd&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;desW;<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(tems&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;distance)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;tems&nbsp;</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">&nbsp;distance;<br>&nbsp;&nbsp;&nbsp;&nbsp;sb</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(temd&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;distance)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;temd&nbsp;</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">&nbsp;distance;<br>&nbsp;&nbsp;&nbsp;&nbsp;db</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;生成放大缩小后图形像素buf</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[]&nbsp;desBuf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[desW&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;desH];<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;dx&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;dy&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;sy&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;oldy&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;desH;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(oldy&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;tabY[i])&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;System.arraycopy(desBuf,&nbsp;dy&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;desW,&nbsp;desBuf,&nbsp;dy,&nbsp;desW);<br>&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;dx&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;desW;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;desBuf[dy&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;dx]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;srcBuf[sy&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;tabX[j]];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dx</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;sy&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;(tabY[i]&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;oldy)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;srcW;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;oldy&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tabY[i];<br>&nbsp;&nbsp;&nbsp;dy&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;desW;<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;生成图片</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;desImg&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Image.createRGBImage(desBuf,&nbsp;desW,&nbsp;desH,&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;desImg;<br>&nbsp;}<br><br><strong><span style="COLOR: #666699">1.2 midp1.0下可用的缩放函数</span><br></strong><font color=#000000>&nbsp;</font><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;Image&nbsp;scaleImage&nbsp;(Image&nbsp;src,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;dstW,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;dstH)&nbsp;{<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;srcW&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;src.getWidth();<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;srcH&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;src.getHeight();<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;Image&nbsp;tmp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Image.createImage(dstW,&nbsp;srcH);<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;Graphics&nbsp;g&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tmp.getGraphics();<br>&nbsp;&nbsp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;delta&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(srcW&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;dstW;<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;pos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;delta</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;x&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;dstW;&nbsp;x</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;g.setClip(x,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;srcH);<br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;g.drawImage(src,&nbsp;x&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;(pos&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">),&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;Graphics.LEFT&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;Graphics.TOP);<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;pos&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;delta;<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;Image&nbsp;dst&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Image.createImage(dstW,&nbsp;dstH);<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;g&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dst.getGraphics();<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;delta&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(srcH&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;dstH;<br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;pos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;delta</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;y&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;dstH;&nbsp;y</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;g.setClip(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;y,&nbsp;dstW,&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;g.drawImage(tmp,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;y&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;(pos&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">),&nbsp;Graphics.LEFT&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;Graphics.TOP);<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;pos&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;delta;<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;}<br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;dst;<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&nbsp;}<br>&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #000000">}</span><br><strong style="COLOR: #666699">2.其他图像的处理,如图像的颜色/翻转<br>下面提供了源代码, 点击<a style="COLOR: #ff0000" href="http://www.cppblog.com/Files/gtwdaizi/image_src.rar" target=_self><span style="COLOR: #ff0000">这里</span></a>下载</strong></span></p>
<img src ="http://www.cppblog.com/gtwdaizi/aggbug/36209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2007-11-09 19:57 <a href="http://www.cppblog.com/gtwdaizi/articles/36209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclispe中调试J2ME程序(Debug)</title><link>http://www.cppblog.com/gtwdaizi/articles/36063.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Wed, 07 Nov 2007 12:52:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/36063.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/36063.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/36063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/36063.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/36063.html</trackback:ping><description><![CDATA[<p>在Eclipse中，使用模拟器调试kvm时控制台显示如下：<br>Connecting to 127.0.0.1 on port 2800<br>Connecting to debugger at localhost:3170<br>Waiting for KVM...<br>正在通过存储根 temp.DefaultColorPhone1111472185125 来运行 <br>Connection received.<br>Connected to KVM<br>Method............: 101657ec 'com/sun/cldc/i18n/j2me/UTF_8_Reader.read (virtual)' <br>Stack Chunk.......: ec37e4<br>Frame Pointer.....: ec3814<br>Current IP........: 101e4b6c = 101e4b50 + offset 28<br>Previous Frame....: e70714<br>Previous IP.......: 1021a866 (offset 11)<br>Frame size........: 10 (4 arguments, 6 local variables)<br>Argument[0].......: ea5494<br>Argument[1].......: ea4d68<br>Argument[2].......: 0<br>Argument[3].......: 1<br>Local[4]..........: 0<br>Local[5]..........: 0<br>Local[6]..........: 0<br>Local[7]..........: 0<br>Local[8]..........: 0<br>Local[9]..........: 0<br>Operand[1]........: 72<br><br>Method............: 10188c50 'java/io/Reader.read (virtual)' <br>Stack Chunk.......: e7056c<br>Frame Pointer.....: e70714<br>Current IP........: 1021a866 = 1021a85b + offset 11<br>Previous Frame....: e706f4<br>Previous IP.......: 101e2b1f (offset 11)<br>Frame size........: 2 (1 arguments, 1 local variables)<br>Argument[0].......: ea5494<br>Local[1]..........: ea4d68<br><br>Method............: 10163e1c 'java/io/InputStreamReader.read (virtual)' <br>Stack Chunk.......: e7056c<br>Frame Pointer.....: e706f4<br>Current IP........: 101e2b1f = 101e2b14 + offset 11<br>Previous Frame....: e706d8<br>Previous IP.......: 101fbc3a (offset 15)<br>Frame size........: 1 (1 arguments, 0 local variables)<br>Argument[0].......: ea5710<br><br>Method............: 10174edc 'com/sun/midp/midletsuite/JadProperties.readLine (virtual)' <br>Stack Chunk.......: e7056c<br>Frame Pointer.....: e706d8<br>Current IP........: 101fbc3a = 101fbc2b + offset 15<br>Previous Frame....: e706a8<br>Previous IP.......: 101fbb43 (offset 63)<br>Frame size........: 6 (2 arguments, 4 local variables)<br>Argument[0].......: ea5c60<br>Argument[1].......: ea5710<br>Local[2]..........: 1fd<br>Local[3]..........: 3<br>Local[4]..........: 63<br>Local[5]..........: 0<br><br>Method............: 10174e7c 'com/sun/midp/midletsuite/JadProperties.partialLoad (virtual)' <br>Stack Chunk.......: e7056c<br>Frame Pointer.....: e706a8<br>Current IP........: 101fbb43 = 101fbb04 + offset 63<br>Previous Frame....: e70660<br>Previous IP.......: 101fbb03 (offset 8)<br>Frame size........: 12 (4 arguments, 8 local variables)<br>Argument[0].......: ea5c60<br>Argument[1].......: ea5728<br>Argument[2].......: 0<br>Argument[3].......: 7fffffff<br>Local[4]..........: ea5710<br>Local[5]..........: ea4e84<br>Local[6]..........: e<br>Local[7]..........: ea4e30<br>Local[8]..........: f<br>Local[9]..........: ea4dd4<br>Local[10]..........: 0<br>Local[11]..........: 1<br><br>Method............: 10174e5c 'com/sun/midp/midletsuite/JadProperties.load (virtual)' <br>Stack Chunk.......: e7056c<br>Frame Pointer.....: e70660<br>Current IP........: 101fbb03 = 101fbafb + offset 8<br>Previous Frame....: e7063c<br>Previous IP.......: 101f1596 (offset 190)<br>Frame size........: 3 (3 arguments, 0 local variables)<br>Argument[0].......: ea5c60<br>Argument[1].......: ea5728<br>Argument[2].......: 0<br><br>Method............: 1016d8b0 'com/sun/midp/dev/DevMIDletSuiteImpl.create (static)' <br>Stack Chunk.......: e7056c<br>Frame Pointer.....: e7063c<br>Current IP........: 101f1596 = 101f14d8 + offset 190<br>Previous Frame....: e705d0<br>Previous IP.......: 101f14d7 (offset 62)<br>Frame size........: 21 (10 arguments, 11 local variables)<br>Argument[0].......: ec183c<br>Argument[1].......: ebae20<br>Argument[2].......: ebaea8<br>Argument[3].......: 10115c10<br>Argument[4].......: 0<br>Argument[5].......: 0<br>Argument[6].......: 1010aa68<br>Argument[7].......: 0<br>Argument[8].......: 0<br>Argument[9].......: 0<br>Local[10]..........: ea5cc8<br>Local[11]..........: ea5b9c<br>Local[12]..........: 0<br>Local[13]..........: ea5d1c<br>Local[14]..........: 8<br>Local[15]..........: ea576c<br>Local[16]..........: 3e1<br>Local[17]..........: ea577c<br>Local[18]..........: ea5728<br>Local[19]..........: 0<br>Local[20]..........: 0<br><br>Method............: 1016d890 'com/sun/midp/dev/DevMIDletSuiteImpl.create (static)' <br>Stack Chunk.......: e7056c<br>Frame Pointer.....: e705d0<br>Current IP........: 101f14d7 = 101f1499 + offset 62<br>Previous Frame....: e705a4<br>Previous IP.......: 101dec7d (offset 20)<br>Frame size........: 5 (5 arguments, 0 local variables)<br>Argument[0].......: ec183c<br>Argument[1].......: ebae20<br>Argument[2].......: ebaea8<br>Argument[3].......: 10115c10<br>Argument[4].......: 0<br><br>Method............: 1016224c 'com/sun/midp/main/Main.runLocalClass (static)' <br>Stack Chunk.......: e7056c<br>Frame Pointer.....: e705a4<br>Current IP........: 101dec7d = 101dec69 + offset 20<br>Previous Frame....: e70580<br>Previous IP.......: 101de6fc (offset 116)<br>Frame size........: 3 (1 arguments, 2 local variables)<br>Argument[0].......: ec2028<br>Local[1]..........: 0<br>Local[2]..........: 0<br><br>Method............: 101621ac 'com/sun/midp/main/Main.main (static)' <br>Stack Chunk.......: e7056c<br>Frame Pointer.....: e70580<br>Current IP........: 101de6fc = 101de688 + offset 116<br>Previous Frame....: 0<br>Previous IP.......: 1<br>Frame size........: 3 (1 arguments, 2 local variables)<br>Argument[0].......: e70858<br>Local[1]..........: ec2028<br>Local[2]..........: ebaefc<br><br>VM status:<br>Instruction pointer.: 101e4b6c (offset within invoking method: 28)<br>Next instruction....: 0x36<br>Frame pointer.......: ec3814<br>Local pointer.......: ec37ec<br>Stack size..........: 256; sp: ec382c; ranges: e70574-e70774;ec37ec-ec39ec;<br>Contents of the current stack frame:<br>&nbsp;&nbsp;&nbsp;&nbsp;ec37ec: ea5494 (lp)<br>&nbsp;&nbsp;&nbsp;&nbsp;ec37f0: ea4d68<br>&nbsp;&nbsp;&nbsp;&nbsp;ec37f4: 0<br>&nbsp;&nbsp;&nbsp;&nbsp;ec37f8: 1<br>&nbsp;&nbsp;&nbsp;&nbsp;ec37fc: 0<br>&nbsp;&nbsp;&nbsp;&nbsp;ec3800: 0<br>&nbsp;&nbsp;&nbsp;&nbsp;ec3804: 0<br>&nbsp;&nbsp;&nbsp;&nbsp;ec3808: 0<br>&nbsp;&nbsp;&nbsp;&nbsp;ec380c: 0<br>&nbsp;&nbsp;&nbsp;&nbsp;ec3810: 0<br>&nbsp;&nbsp;&nbsp;&nbsp;ec3814: e70714 (fp)<br>&nbsp;&nbsp;&nbsp;&nbsp;ec3818: 1021a866<br>&nbsp;&nbsp;&nbsp;&nbsp;ec381c: e70728<br>&nbsp;&nbsp;&nbsp;&nbsp;ec3820: 101657ec<br>&nbsp;&nbsp;&nbsp;&nbsp;ec3824: ec37e4<br>&nbsp;&nbsp;&nbsp;&nbsp;ec3828: 0 (end of frame)<br>&nbsp;&nbsp;&nbsp;&nbsp;ec382c: 72 (sp)<br>Execution stack contains 580 items: <br>e70858&nbsp;&nbsp;<br>ec2028&nbsp;&nbsp;<br>ebaefc&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>1&nbsp;&nbsp;<br>e70570&nbsp;&nbsp;<br>101621ac&nbsp;&nbsp;<br>e7056c&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>ec2028&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>e70580&nbsp;&nbsp;<br>101de6fc&nbsp;&nbsp;<br>e70594&nbsp;&nbsp;<br>1016224c&nbsp;&nbsp;<br>e7056c&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>ec183c&nbsp;&nbsp;<br>ebae20&nbsp;&nbsp;<br>ebaea8&nbsp;&nbsp;<br>10115c10&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>e705a4&nbsp;&nbsp;<br>101dec7d&nbsp;&nbsp;<br>e705b8&nbsp;&nbsp;<br>1016d890&nbsp;&nbsp;<br>e7056c&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>ec183c&nbsp;&nbsp;<br>ebae20&nbsp;&nbsp;<br>ebaea8&nbsp;&nbsp;<br>10115c10&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>1010aa68&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>ea5cc8&nbsp;&nbsp;<br>ea5b9c&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>ea5d1c&nbsp;&nbsp;<br>8&nbsp;&nbsp;<br>ea576c&nbsp;&nbsp;<br>3e1&nbsp;&nbsp;<br>ea577c&nbsp;&nbsp;<br>ea5728&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>e705d0&nbsp;&nbsp;<br>101f14d7&nbsp;&nbsp;<br>e705e4&nbsp;&nbsp;<br>1016d8b0&nbsp;&nbsp;<br>e7056c&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>ea5c60&nbsp;&nbsp;<br>ea5728&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>e7063c&nbsp;&nbsp;<br>101f1596&nbsp;&nbsp;<br>e70650&nbsp;&nbsp;<br>10174e5c&nbsp;&nbsp;<br>e7056c&nbsp;&nbsp;<br>ea5c60&nbsp;&nbsp;<br>ea5c60&nbsp;&nbsp;<br>ea5728&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>7fffffff&nbsp;&nbsp;<br>ea5710&nbsp;&nbsp;<br>ea4e84&nbsp;&nbsp;<br>e&nbsp;&nbsp;<br>ea4e30&nbsp;&nbsp;<br>f&nbsp;&nbsp;<br>ea4dd4&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>1&nbsp;&nbsp;<br>e70660&nbsp;&nbsp;<br>101fbb03&nbsp;&nbsp;<br>e70674&nbsp;&nbsp;<br>10174e7c&nbsp;&nbsp;<br>e7056c&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>ea5c60&nbsp;&nbsp;<br>ea5710&nbsp;&nbsp;<br>1fd&nbsp;&nbsp;<br>3&nbsp;&nbsp;<br>63&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>e706a8&nbsp;&nbsp;<br>101fbb43&nbsp;&nbsp;<br>e706bc&nbsp;&nbsp;<br>10174edc&nbsp;&nbsp;<br>e7056c&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>ea5710&nbsp;&nbsp;<br>e706d8&nbsp;&nbsp;<br>101fbc3a&nbsp;&nbsp;<br>e706ec&nbsp;&nbsp;<br>10163e1c&nbsp;&nbsp;<br>e7056c&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>ea5494&nbsp;&nbsp;<br>ea4d68&nbsp;&nbsp;<br>e706f4&nbsp;&nbsp;<br>101e2b1f&nbsp;&nbsp;<br>e70708&nbsp;&nbsp;<br>10188c50&nbsp;&nbsp;<br>e7056c&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>ea5494&nbsp;&nbsp;<br>ea4d68&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>1&nbsp;&nbsp;<br>ea4dd4&nbsp;&nbsp;<br>1&nbsp;&nbsp;<br>1&nbsp;&nbsp;<br>e7072c&nbsp;&nbsp;<br>10162008&nbsp;&nbsp;<br>e7056c&nbsp;&nbsp;<br>ea5c48&nbsp;&nbsp;<br>ffffffff&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>10116528&nbsp;&nbsp;<br>b&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>ea5494&nbsp;&nbsp;<br>ea4d68&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>1&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>e70714&nbsp;&nbsp;<br>1021a866&nbsp;&nbsp;<br>e70728&nbsp;&nbsp;<br>101657ec&nbsp;&nbsp;<br>ec37e4&nbsp;&nbsp;<br>0&nbsp;&nbsp;<br>72&nbsp;&nbsp;<br><br>Execution completed.<br>ALERT: Attempting to resume current thread<br>653306 bytecodes executed<br>3 thread switches<br>738 classes in the system (including system classes)<br>16084 dynamic objects allocated (821916 bytes)<br>3 garbage collections (539264 bytes collected)<br>Execution completed.<br>653306 bytecodes executed<br>3 thread switches<br>738 classes in the system (including system classes)<br>16084 dynamic objects allocated (821916 bytes)<br>3 garbage collections (539264 bytes collected)<br><br>模拟器一闪就没了。<br><br>要解决这个问题，需要做如下工作：<br><br>安装好EclipseME之后，我们要对原有的Eclipse配置做一点小小的改动。由于开发J2ME时我们需要首先启动手机模拟器，那么在Debug模式的Eclipse默认设置不等到模拟器启动就会失败。修改这点很简单，在Window -&gt;Preference-&gt;Java-&gt;Debug中，把超时时间提高到 20000 毫秒。</p>
<br>在运行调试的时候经常会出现classnotfound的问题, 出现这种问题首先要检查是否在Java Build Path - order and export中包括了需要的jar.
<img src ="http://www.cppblog.com/gtwdaizi/aggbug/36063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2007-11-07 20:52 <a href="http://www.cppblog.com/gtwdaizi/articles/36063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>com.sun.kvem.midletsuite.InvalidJadException:Reason = 36 Error in opening jar file:..........</title><link>http://www.cppblog.com/gtwdaizi/articles/33050.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Sat, 29 Sep 2007 01:42:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/33050.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/33050.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/33050.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/33050.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/33050.html</trackback:ping><description><![CDATA[<img height=491 alt="" src="http://www.cppblog.com/images/cppblog_com/gtwdaizi/Snap1.jpg" width=620 border=0>&nbsp;<br>今天运行以前做好的一个J2ME的程序, 弹出这个对话框, 打开JAD文件一查看,原来在JAD文件中指定的.jar文件名出现了错误.导致了这个情况.
<img src ="http://www.cppblog.com/gtwdaizi/aggbug/33050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2007-09-29 09:42 <a href="http://www.cppblog.com/gtwdaizi/articles/33050.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转载】RGB，YUV的来历及其相互转换</title><link>http://www.cppblog.com/gtwdaizi/articles/32956.html</link><dc:creator>郭天文</dc:creator><author>郭天文</author><pubDate>Sat, 29 Sep 2007 01:40:00 GMT</pubDate><guid>http://www.cppblog.com/gtwdaizi/articles/32956.html</guid><wfw:comment>http://www.cppblog.com/gtwdaizi/comments/32956.html</wfw:comment><comments>http://www.cppblog.com/gtwdaizi/articles/32956.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gtwdaizi/comments/commentRss/32956.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gtwdaizi/services/trackbacks/32956.html</trackback:ping><description><![CDATA[在视频等相关的应用中，<span><font face=Calibri>YUV</font></span><span>是一个经常出现的格式。本文主要以图解的资料的形式详细描述</span><span><font face=Calibri>YUV</font></span><span>和</span><span><font face=Calibri>RGB</font></span><span>格式的来由，相互关系以及转换方式，并对</span><span><font face=Calibri>C</font></span><span>语言实现的</span><span><font face=Calibri>YUV</font></span><span>转为</span><span><font face=Calibri>RGB</font></span><span>程序进行介绍。</span>
<p><span><span><font face=Calibri>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span>人类眼睛的色觉，具有特殊的特性，早在上世纪初，</span><span><font face=Calibri>Young</font></span><span>（</span><span><font face=Calibri>1809</font></span><span>）和</span><span><font face=Calibri>Helmholtz</font></span><span>（</span><span><font face=Calibri>1824</font></span><span>）就提出了视觉的三原色学说，即：视网膜存在三种视锥细胞，分别含有对红、绿、蓝三种光线敏感的视色素，当一定波长的光线作用于视网膜时，以一定的比例使三种视锥细胞分别产生不同程度的兴奋，这样的信息传至中枢，就产生某一种颜色的感觉。</span></p>
<p><font size=3><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>70<span>年代以来，由于实验技术的进步，关于视网膜中有三种对不同波长光线特别敏感的视锥细胞的假说，已经被许多出色的<strong>实验所证实</strong>。</span></span><font face="Times New Roman"> </font></font><font face="Times New Roman"></font><font size=3><span>例如：①有人用不超过单个视锥直径的细小单色光束，逐个检查并绘制在体（最初实验是在金鱼和蝾螈等动物进行，以后是人）<strong>视锥细胞的光谱吸收曲线</strong>，发现所有绘制出来的曲线不外三种类型，分别代表了三类光谱吸收特性不同的视锥细胞，一类的吸收峰值在</span><span>420nm<span>处，一类在</span>534nm<span>处，一类在</span>564nm<span>处，差不多正好相当于蓝、绿、红三色光的波长。与上述视觉三原色学说的假设相符。②用微电极记录单个视锥细胞感受器电位的方法，也得到了类似的结果，即不同单色光所引起的不同视锥细胞的超极化型感受器电位的大小也不同，峰值出现的情况符合于三原色学说。</span></span></font></p>
<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 1.0pt"><span style="mso-spacerun: yes"><br><br><br><span lang=ZH style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-font-kerning: 1.0pt">于是，在彩色显示器</span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">还没有发明的时候，人类已经懂得使用三原色光调配出所有颜色的光。并不是说三原色混合后产生了新的频率的光，而是给人眼睛的感觉是这样。<br><br><br><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">在显示器发明之后，从黑白显示器发展到彩色显示器，人们开始使用发出不同颜色的光的荧光粉（</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>CRT</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">，等离子体显示器），或者不同颜色的滤色片（</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>LCD</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">），或者不同颜色的半导体发光器件（</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>OLED</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">和</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>LED</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">大型全彩显示牌）来形成色彩，无一例外的选择了</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Red,Green,Blue</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">这</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>3</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">种颜色的发光体作为基本的发光单元。通过控制他们发光强度，组合出了人眼睛能够感受到的大多数的自然色彩。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><span style="mso-spacerun: yes"><font face=Calibri>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">计算机显示彩色图像的时候也不例外，最终显示的时候，要控制一个像素中</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Red,Green,Blue</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的值，来确定这个像素的颜色。计算机中无法模拟连续的存储从最暗到最亮的量值，而只能以数字的方式表示。于是，结合人眼睛的敏感程度，使用</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>3</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个字节（</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>3*8</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">位）来分别表示一个像素里面的</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Red,Green</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">和</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Blue</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的发光强度数值，这就是常见的</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>RGB</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">格式。我们可以打开画图板，在自定义颜色工具框中，输入</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>r,g,b</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">值，得到不同的颜色。<br><br><br><br><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">但是对于视频捕获和编解码等应用来讲，这样的表示方式数据量太大了。需要想办法在不太影响感觉的情况下，对原始数据的表示方法进行更改，减少数据量。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;</span></font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">无论中间处理过程怎样，最终都是为了展示给人观看，这样的更改，也是从人眼睛的特性出发，和发明</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>RGB</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">三原色表示方法的出发点是一样的。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><span style="mso-spacerun: yes"><font face=Calibri>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">于是我们使用</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y,Cb,Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">模型来表示颜色。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Iain</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的书中写道：</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>The human visual system (HVS) is less sensitive to colour than to luminance (brightness).</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">人类视觉系统（其实就是人的眼睛）对亮度的感觉比对颜色更加敏感。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><span style="mso-spacerun: yes"><font face=Calibri>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">在</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>RGB</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">色彩空间中，三个颜色的重要程度相同，所以需要使用相同的分辨率进行存储，最多使用</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>RGB565</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">这样的形式减少量化的精度，但是</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>3</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个颜色需要按照相同的分辨率进行存储，数据量还是很大的。所以，利用人眼睛对亮度比对颜色更加敏感，将图像的亮度信息和颜色信息分离，并使用不同的分辨率进行存储，这样可以在对主观感觉影响很小的前提下，更加有效的存储图像数据。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span>YCbCr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">色彩空间和它的变形（有时被称为</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>YUV</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">）是最常用的有效的表示彩色图像的方法。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">是图像的亮度（</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>luminance/luma</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">）分量，使用以下公式计算，为</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>R,G,B</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">分量的加权平均值：</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span>Y = kr R + kgG + kbB<o:p></o:p></font></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><span style="mso-spacerun: yes"><font face=Calibri>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">其中</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>k</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">是权重因数。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><span style="mso-spacerun: yes"><font face=Calibri>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">上面的公式计算出了亮度信息，还有颜色信息，使用色差（</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>color difference/chrominance</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">或</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>chroma</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">）来表示，其中每个色差分量为</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>R,G,B</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">值和亮度</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的差值：</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt"><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">　　</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb = B </font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">－</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y<o:p></o:p></font></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt"><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">　　</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cr = R </font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">－</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y <o:p></o:p></font></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 23.25pt"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cg = G</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">－</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri> Y<o:p></o:p></font></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 23.25pt"><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">其中，</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb+Cr+Cg</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">是一个常数（其实是一个关于</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的表达式），所以，只需要其中两个数值结合</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">值就能够计算出原来的</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>RGB</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">值。所以，我们仅保存亮度和蓝色、红色的色差值，这就是</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>(Y,Cb,Cr)</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 23.25pt"><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">相比</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>RGB</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">色彩空间，</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>YCbCr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">色彩空间有一个显著的优点。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的存储可以采用和原来画面一样的分辨率，但是</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb,Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的存储可以使用更低的分辨率。这样可以占用更少的数据量，并且在图像质量上没有明显的下降。所以，将色彩信息以低于量度信息的分辨率来保存是一个简单有效的图像压缩方法。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 23.25pt"><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">在</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>COLOUR SPACES .17 ITU-R recommendation BT.601 </font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">中，建议在计算</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">时，权重选择为</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>kr=0.299,kg=0.587,kb=0.114</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">。于是常用的转换公式如下：</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 22pt; mso-char-indent-count: 2.0"><font face=Calibri size=3>Y = 0.299R + <st1:chmetcnv UnitName="g" SourceValue=".587" HasSpace="False" Negative="False" NumberType="1" TCSC="0" w:st="on">0.587G</st1:chmetcnv> + 0.114B</font></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 22pt; mso-char-indent-count: 2.0"><font size=3><font face=Calibri>Cb = 0.564(B </font><span lang=ZH style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">－</span><font face=Calibri> Y ) </font></font></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 22pt; mso-char-indent-count: 2.0"><font size=3><font face=Calibri>Cr = 0.713(R </font><span lang=ZH style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">－</span><font face=Calibri> Y )</font></font></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 22pt; mso-char-indent-count: 2.0"><o:p><font face=Calibri size=3>&nbsp;</font></o:p></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 22pt; mso-char-indent-count: 2.0"><font face=Calibri size=3>R = Y + 1.402Cr</font></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 22pt; mso-char-indent-count: 2.0"><font face=Calibri size=3>G = Y - 0.344Cb - 0.714Cr</font></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 22pt; mso-char-indent-count: 2.0"><font face=Calibri size=3>B = Y + 1.772Cb</font></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">有了这个公式，我们就能够将一幅</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>RGB</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">画面转换成为</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>YUV</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">画面了，反过来也可以。下面将画面数据究竟是以什么形式存储起来的。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">在</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>RGB24</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">格式中，对于宽度为</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>w,</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">高度为</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>h</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的画面，需要</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>w*h*3</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个字节来存储其每个像素的</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>rgb</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">信息，画面的像素数据是连续排列的。按照</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>r(0,0),g(0,0),b(0,0);r(0,1),g(0,1),b(0,1);&#8230;;r(w-1,0),g(w-1,0),b(w-1,0);&#8230;;r(w-1,h-1),g(w-1,h-1),b(w-1,h-1)</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">这样的顺序存放起来。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">在</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>YUV</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">格式中，以</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>YUV420</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">格式为例。宽度为</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>w</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">高度为</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>h</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的画面，其亮度</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">数据需要</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>w*h</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个字节来表示（每个像素点一个亮度）。而</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">和</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">数据则是画面中</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>4</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个像素共享一个</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb,Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">值。这样</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">用</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>w*h/4</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个字节，</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">用</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>w*h/4</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个字节。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>YUV</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">文件中，把多个帧的画面连续存放。就是</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>YUV YUV YUV&#8230;..</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">这样的不断连续的形式，而其中每个</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>YUV</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">，就是一幅画面。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">在这单个</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>YUV</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">中，前</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>w*h</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个字节是</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">数据，接着的</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>w*h/4</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个字节是</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">数据，再接着的</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>w*h/4</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个字节为</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">数据。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">在由这样降低了分辨率的数据还原出</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>RGB</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">数据的时候，就要依据像素的位置找到它对应的</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y,Cb,Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">值，其中</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">值最好找到，像素位置为</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>x,y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的话，</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">数据中第</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>y*width+x</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个数值就是它的</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">值。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">和</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">由于是每</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>2x2</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">像素的画面块拥有一个，这样</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">和</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">数据相当于两个分辨率为</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>w/2 * h/2</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的画面，那么原来画面中的位置为</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>x,y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的像素，在这样的低分辨率画面中的位置是</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>x/2,y/2</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">，属于它的</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb,Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">值就在这个地方：</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>(y/2)*(width/2)+(x/2)</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">为了直观起见，再下面的图中，分别将</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">画面</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>(Cb,Cr=0)</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">和</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb,Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">画面</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>(Y=128)</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">显示出来，可见</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb,Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">画面的分辨率是</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Y</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">画面的</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>1/4</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">。但是合成一个画面之后，我们的眼睛丝毫感觉不到</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>4</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个像素是共用一个</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb,Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<br><br>&nbsp; Cb,Cr<span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">画面</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">将</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb,Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">画面放大观察，里面颜色相同的块都是</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>2x2</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">大小的。</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">附件为</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Windows Mobile</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">上使用公式进行</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>YUV</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">到</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>RGB</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">转换的程序。其中需要注意的是</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>Cb,Cr</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">在计算过程中是会出现负数的，但是从</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>-128</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">到</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>127</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">这些数值都用一个字节表示，读取的时候就映射</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>0</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">到</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>255</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">这个区间，成为了无符号的值，所以要减去</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>128</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">，才能参与公式计算。这样的运算有浮点运算，效率是比较低的，所以要提高效率的话，一般在实用程序中使用整数计算或者查表法来代替。还有，运算后的</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>r,g,b</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">可能会超过</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%"><font face=Calibri>0-255</font></span><span lang=ZH style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的区间，作一个判断进行调整就可以了。</span></p>
<span style="COLOR: red">&nbsp;&nbsp;&nbsp;&nbsp;不过这里面的YUV TO RGB的算法,效率实在是低,因为里面有了浮点运算,解一帧176*144的图像大概需要400ms左右,这是无法忍受的,如果消除浮点运算,只需要10ms左右,效率的提升真是无法想象.所以大家还是避免在手机上面进行浮点运算.</span></span></span></span></span>
<img src ="http://www.cppblog.com/gtwdaizi/aggbug/32956.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gtwdaizi/" target="_blank">郭天文</a> 2007-09-29 09:40 <a href="http://www.cppblog.com/gtwdaizi/articles/32956.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>