📄 如何在midp中实现图片放缩.mht
字号:
<div class="nav"> <ol class="action"> <li id="sethomepage"><a href="#" onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.linuxpk.com/');"> </a></li> <li id="fav"><a href="#" target="_self" onclick="myAddPanel('linux宝库 - 全球中文linux门户','http://www.linuxpk.com/','linux宝库-全球中文linux门户');"> </a></li> </ol> <ul class="pknav"><li><a href="http://bbs.linuxpk.com/">论坛</a></li><li><a href="./type199.html">MYSQL</a></li><li><a href="./channel02.html">IT动态</a></li><li><a href="./channel01.html">互联网</a></li><li><a href="./channel05.html">安全</a></li><li><a href="./channel56.html">网页设计</a></li><li><a href="./type1093.html">SSH</a></li><li><a href="./channel53.html">JAVA</a></li><li><a href="./type1067.html">APACHE</a></li><li><a href="./type1112.html">学习方法</a></li><li class="pknavnb"><a href="./type188.html">系统管理</a></li><li><a href="http://www.linuxpk.com/">首页</a></li><li><a href="./type1072.html">SAMBA</a></li><li><a href="./type1088.html">多媒体</a></li><li><a href="./type129.html">发行版</a></li><li><a href="./type201.html">编程</a></li><li><a href="./channel03.html">通信</a></li><li><a href="./type237.html">XML</a></li><li><a href="./type233.html">J2ME</a></li><li><a href="./type1074.html">IPTABLES</a></li><li><a href="./type1079.html">编辑工具</a></li><li class="pknavnb"><a href="./type194.html">网络管理</a></li> </ul> </div> <div style="clear:both;"></div> <div class="sda"> <a href="http://bbs.linuxpk.com/thread-12999-1-1.html" style="font-size: 40px; color: red;">《开源》2008年第6期火热下载进行中</a> </div> <div class="date_notice"> <div class="extra"><p>今天是2008年7月2日 星期三</p> <span class="header_read"><a href="doc/abs/">高级Bash脚本编程指南(中文版)</a> <a href="doc/apache/">APACHE2中文手册</a> <a href="doc/mysql/">MYSQL中文手册</a> <a href="doc/php/">PHP中文手册</a> <a href="doc/vim/">VIM中文手册</a> <a href="http://bbs.linuxpk.com/thread-12999-1-1.html">《开源》杂志2008年第5期火热下载</a></span> <!--<marquee behavior="slide" scrolldelay="120" width="700" direction="left" hspace="15" loop="-1" onmouseout="this.start()" onmouseover="this.stop()"></marquee>--> </div> </div></div><!-- header end --> <table width="1004" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td width="15" height="20" rowspan="2" bgcolor="#FF8A00"></td>
<td height="5" width="1" bgcolor="#FF8A00"></td>
<td valign="top" width="206"bgcolor="#F6F6F6" rowspan="3">
<table width="206" bgcolor="#F6F6F6" border="0" cellspacing="0" cellpadding="0">
<tr><td height="5" bgcolor="#FF8A00" colspan="4"></td></tr>
<tr><td height="1" bgcolor="#333333" colspan="4"></td></tr>
<tr><td height="1" colspan="4"></td></tr>
<tr>
<td width="4" height="31" background="images/erjiyemian/left_bg1.gif"></td>
<td width="25" background="images/erjiyemian/left_bg1.gif"><img src="cid:000301c8dc08$e0e3db9c$_CDOSYS2.0" width="25" height="26" alt="" /></td>
<td background="images/erjiyemian/left_bg1.gif"><span style="font-size:14px;font-weight:bold">栏目分类</span></td>
<td width="4" background="images/erjiyemian/left_bg1.gif"></td>
</tr>
<tr>
<td></td>
<td height="10" colspan="2"></td>
<td></td>
</tr>
<tr>
<td></td>
<td colspan="2" style="white-space:normal;overflow:auto;"><span style="line-height:20px "><a href='type240.html' class='link_cate_blue'>开源技术</a> | <a href='type243.html'>Hibernate</a> | <a href='type248.html'>JUnit</a> | <a href='type247.html'>Tomcat</a> | <a href='type246.html'>JBoss</a> | <a href='type245.html'>eclipse</a> | <a href='type244.html'>Spring</a> | <a href='type241.html'>ANT</a> | <a href='type242.html'>Struts</a><br /><a href='type207.html' class='link_cate_blue'>java新手入门</a> | <a href='type209.html'>基础入门</a> | <a href='type210.html'>开发工具</a> | <a href='type211.html'>JDK</a> | <a href='type212.html'>oop面向对象</a> | <a href='type208.html'>安全配置</a><br /><a href='type225.html' class='link_cate_blue'>J2EE</a> | <a href='type232.html'>mvcwea</a> | <a href='type231.html'>应用服务器</a> | <a href='type230.html'>Rmi/Corba/Jini</a> | <a href='type226.html'>J2ee核心</a> | <a href='type227.html'>Servlet/JSP</a> | <a href='type228.html'>EJB</a> | <a href='type229.html'>JDBC/JDO</a><br /><a href='type233.html' class='link_cate_blue'>J2ME</a> | <a href='type234.html'>核心技术</a> | <a href='type235.html'>嵌入式</a> | <a href='type236.html'>无线开发</a><br /><a href='type237.html' class='link_cate_blue'>XML</a> | <a href='type239.html'>WebServices</a> | <a href='type238.html'>XMLBeans</a><br /><a href='type219.html' class='link_cate_blue'>高级技术</a> | <a href='type223.html'>多线程</a> | <a href='type220.html'>设计模式</a> | <a href='type221.html'>ULM/OO</a> | <a href='type222.html'>p2p/Jxta</a> | <a href='type224.html'>JavaSecurity</a><br /><a href='type213.html' class='link_cate_blue'>核心技术</a> | <a href='type214.html'>SwingAwtApplet</a> | <a href='type215.html'>高级编程</a> | <a href='type216.html'>网络编程</a> | <a href='type217.html'>Jvm技术</a> | <a href='type218.html'>JavaMedia</a><br /><a href='type249.html'>其它技术</a> | <a href='type206.html'>资讯动态</a> </span></td>
<td></td>
</tr>
<tr>
<td></td>
<td height="10" colspan="2"></td>
<td></td>
</tr>
<tr><td height="1" bgcolor="#333333" colspan="4"></td></tr>
<tr><td height="1" colspan="4"></td></tr>
<tr>
<td width="4" height="31" background="images/erjiyemian/left_bg1.gif"></td>
<td width="25" background="images/erjiyemian/left_bg1.gif"><img src="cid:000401c8dc08$e0e3db9c$_CDOSYS2.0" width="25" height="26" alt="" /></td>
<td background="images/erjiyemian/left_bg1.gif"><span style="font-size:14px;font-weight:bold;">排行榜</span></td>
<td width="4" background="images/erjiyemian/left_bg1.gif"></td>
</tr>
<tr>
<td></td>
<td height="10" colspan="2"></td>
<td></td>
</tr>
<tr>
<td></td>
<td colspan="2"><span style="line-height:20px;">·<a href='./45939.html' title="J2ME基础入门教程">J2ME基础入门教程</a><br />·<a href='./45923.html' title="熟练使用J2ME在实际开发中的可选包MMAPI">熟练使用J2ME在实际开发中的可选包MMAPI</a><br />·<a href='./45906.html' title="新手入门之j2me学习方法总结--摘录篇">新手入门之j2me学习方法总结--摘录篇</a><br />·<a href='./45905.html' title="J2ME程序开发新手入门九大要点">J2ME程序开发新手入门九大要点</a><br />·<a href='./45911.html' title="J2ME综合:如何在MIDP中实现图片放缩">J2ME综合:如何在MIDP中实现图片放缩</a><br />·<a href='./45938.html' title="J2ME与WebService-KSOAP快速上手">J2ME与WebService-KSOAP快速上手</a><br />·<a href='./45949.html' title="如何使用“月蚀”进行J2ME开发">如何使用“月蚀”进行J2ME开发</a><br />·<a href='./45972.html' title="J2ME概述">J2ME概述</a><br />·<a href='./45935.html' title="J2ME进度条与线程化模型实例解析">J2ME进度条与线程化模型实例解析</a><br />·<a href='./45974.html' title="J2ME的现状与发展">J2ME的现状与发展</a><br />·<a href='./45910.html' title="J2ME实现可伸展目录树TreeList(图)">J2ME实现可伸展目录树TreeList(图)</a><br />·<a href='./45978.html' title="知己知彼——J2ME技术详">知己知彼——J2ME技术详</a><br />·<a href='./45909.html' title="Java思路开发易于移植的J2ME游戏">Java思路开发易于移植的J2ME游戏</a><br />·<a href='./45975.html' title="告诉你J2ME是什么">告诉你J2ME是什么</a><br />·<a href='./45912.html' title="关于J2ME——MIDP1.0中的碰撞检测">关于J2ME——MIDP1.0中的碰撞检测</a><br />·<a href='./45937.html' title="在J2ME中读取各种格式的文本文件">在J2ME中读取各种格式的文本文件</a><br />·<a href='./45950.html' title="如何搭建J2ME的开发环境之一二">如何搭建J2ME的开发环境之一二</a><br />·<a href='./45907.html' title="J2ME工具:使用j2meunit进行游戏测试">J2ME工具:使用j2meunit进行游戏测试</a><br />·<a href='./45904.html' title="使用J2ME中的page进行编码转化">使用J2ME中的page进行编码转化</a><br />·<a href='./45920.html' title="J2ME学习系列之如何将J2ME与XML集成">J2ME学习系列之如何将J2ME与XML集成</a><br /></span></td>
<td></td>
</tr>
</table>
</td>
<td height="5" width="1" bgcolor="#FF8A00"></td>
<td height="25" bgcolor="#FF8A00" colspan="6" rowspan="2"><img src="cid:000501c8dc08$e0e3db9c$_CDOSYS2.0" width="1" height="3" alt="" /><br /><span class='text_white'> 您现在的位置: <a class='white_text' href='./'>Linux宝库</a> >> <a class='white_text' href='channel53.html'>Java</a> >> <a href='type233.html' class='white_text'>J2ME</a> >> <a href='type234.html' class='white_text'>核心技术</a> >> 文章正文</span></td>
</tr>
<tr>
<td height="15" bgcolor="#333333"></td>
<td bgcolor="#333333"></td>
</tr>
<tr>
<td background="images/erjiyemian/top_bg2.gif" style="background-repeat:repeat-x "></td>
<td width="1" bgcolor="#333333"></td>
<td width="1" bgcolor="#333333"></td>
<td valign="top" width="15" background="images/erjiyemian/top_bg2.gif" style="background-repeat:repeat-x "><img src="cid:000601c8dc08$e0e3db9c$_CDOSYS2.0" width="12" height="174" alt="" /></td>
<td valign="top" width="559" background="images/erjiyemian/top_bg2.gif" style="background-repeat:repeat-x ">
<table width="559" border="0" cellspacing="0" cellpadding="0">
<tr><td height="70" colspan="2" align="center" valign="middle"><span style="font-size:16px "><b>J2ME综合:如何在MIDP中实现图片放缩</b></span></td></tr>
<tr><td height="20" colspan="2" align="center"> <a href="http://www.linuxpk.com">Linux宝库</a> 收集整理 作者:Linux宝库 时间:2007-12-31 <a href="#" target="_self" onclick="myAddPanel('Linux宝库 - 顶尖的linux门户','http://www.linuxpk.com/','Linux宝库 - 顶尖的linux门户');">收藏本站</a></td></tr>
<tr>
<td width="556" height="1" bgcolor="#969594"></td>
<td width="3" rowspan="3"></td>
</tr>
<tr><td height="1"></td></tr>
<tr><td height="5" bgcolor="#EDEDEC"></td></tr>
</table>
<table width="559" border="0" cellspacing="0" cellpadding="0">
<tr><td height="15" colspan="5"></td></tr>
<tr>
<td width="5" rowspan="3"></td>
<td valign="top" colspan="3" style="color:#333333;line-height:18px;">
<table border='0' cellpadding='1' cellspacing='0'><tr><td>来自:<a href="http://doc.linuxpk.com/45911.html">http://doc.linuxpk.com/45911.html</a></td></tr><tr><td>联系:linuxmine#gmail.com</td></tr><tr><td>分类:<a href='type234.html'>[核心技术]</a></td></tr></table><script type="text/javascript">
cpro_client='linuxmine_cpr';
cpro_cbd='#trans';
cpro_cbg='#trans';
cpro_ctitle='#0000ff';
cpro_cdesc='#444444';
cpro_curl='#008000';
cpro_clink='#000000';
cpro_flush=2;
cpro_w=480;
cpro_h=160;
cpro_template='text_pages_480_160';
</script>
<script language="JavaScript" type="text/javascript" src="http://cpro.baidu.com/cpro/ui/cp.js"></script>
<br />
无论在midp1.0还是在midp2.0中,系统都没有给我们提供对图片进行伸缩操作的api.但是其实我们只要在程序代码中略施小计,就能达到这个效果,只是效果要比美术做出来的图片,呵呵,差多啦,同时也会造成性能损失。伸缩图片的构造原理就是简单沿x,y轴按比例放缩,比如说我们需要把一张16*16的png图片转化成一张32*32的图片,那么我们可以先对该图片做一个水平方向上的拉伸操作,然后再把水平拉伸后的图片按垂直方向再做一次拉伸操作。做拉伸操作时,比如水平方向上,我们需要构造一张32*16的mutable Image,获取其Graphics,利用该Graphics,绘制该mutable Graphics的每一列像素,这一列像素就来自于原始图片中的按比例对应的某一列像素。垂直方向上的拉伸操作也是如法炮制。因为是一种按比例的对应关系,图像的缩小操作也可按该办法进行。<br /><br /> 效果如下图所示<br /><br /> <center><br /><br /> <img src=cid:000701c8dc08$e0e3db9c$_CDOSYS2.0 ></center><br /><br /> <center>原始图片</center><br /><br /> <center><br /><br /> <img src=cid:000801c8dc08$e0e3db9c$_CDOSYS2.0 ></center><br /><br /> <center>图片放大为全屏幕大小</center><br /><br /> <center> <img src=cid:000901c8dc08$e0e3db9c$_CDOSYS2.0 ></center><br /><br /> <center>图片缩小为原来的1/4大小</center><br /><br /> 好了,我们来看代码<br /><br /> import javax.microedition.lcdui.Graphics;<br /><br /> import javax.microedition.lcdui.Image;<br /><br /> /**<br /><br /> * 图像工具类<br /><br /> * @author Jagie<br /><br /> *<br /><br /> */<br /><br /> public class ImageUtil {<br /><br /> /**<br /><br /> * 图像放缩方法<br /><br /> * @param srcImage 原始的Image对象<br /><br /> * @param newW 放缩后的Image的宽度<br /><br /> * @param newH 放缩后的Image的高度<br /><br /> * @return 放缩后的Image对象<br /><br /> */<br /><br /> public static final Image scale (Image srcImage, int newW, int newH) {<br /><br /> int srcW = srcImage.getWidth();<br /><br /> int srcH = srcImage.getHeight();<br /><br /> //先做水平方向上的伸缩变换<br /><br /> Image tmp = Image.createImage(newW, srcH);<br /><br /> Graphics g = tmp.getGraphics();<br /><br /> for (int x = 0; x < newW; x++) {<br /><br /> g.setClip(x, 0, 1, srcH);<br /><br /> //按比例放缩<br /><br /> g.drawImage(srcImage,x-x*srcWnewW,0,Graphics.LEFT | Graphics.TOP);<br /><br /> }<br /><br /> //再做垂直方向上的伸缩变换<br /><br /> Image dst = Image.createImage(newW, newH);<br /><br /> g = dst.getGraphics();<br /><br /> for (int y = 0; y < newH; y++) {<br /><br /> g.setClip(0, y, newW, 1);<br /><br /> //按比例放缩<br /><br /> g.drawImage(tmp,0,y-y*srcHnewH,Graphics.LEFT | Graphics.TOP);<br /><br /> }<br /><br /> return dst;<br /><br /> }<br /><br /> }<br /><br /> 也许有同学会提出疑问,既然是按x,y方向按等比例放缩,那我写成这样岂不是代码更简洁:<br /><br /> public static final Image scale2(Image srcImage, int newW, int newH) {<br /><br /> int srcW = srcImage.getWidth();<br /><br /> int srcH = srcImage.getHeight();<br /><br /> Image dst=Image.createImage(newW,newH);<br /><br /> Graphics g=dst.getGraphics();<br /><br /> for (int x = 0; x < newW; x++) {<br /><br /> for (int y = 0; y < newH; y++) {<br /><br /> g.setClip(x, y, 1, 1);<br /><br /> g.drawImage(srcImage, x-x*srcWnewW, y - y * srcH / newH, Graphics.LEFT<br /><br /> | Graphics.TOP);<br /><br /> }<br /><br /> }<br /><br /> return dst;<br /><br /> }<br /><br /> 这种做法效果上和前者无异,但是并不可取,只要算算它的时间复杂度就知道,基本上是前者的平方。在我的机器上,做一次全屏幕的放缩操作,前者耗时60ms,而后者耗时7150ms。<br /><br /> </DIV><a href="http://doc.linuxpk.com/45911.html">本文来自:http://doc.linuxpk.com/45911.html</a><br />
<a href="http://bbs.linuxpk.com" target="_blank" style="font-size:14px;color:red">发表您的高见!<a><br />
<br /><span class='title_js_lan'>·上一篇:</span><a class='link_js_lan' href='./45910.html' title="J2ME实现可伸展目录树TreeList(图)">J2ME实现可伸展目录树TreeList(图)</a><br /><span class='title_js_lan'>·下一篇:</span><a class='link_js_lan' href='./45912.html' title="关于J2ME——MIDP1.0中的碰撞检测">关于J2ME——MIDP1.0中的碰撞检测</a> </td>
<td width="5" rowspan="3"></td>
</tr>
</table>
<table width="559" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="5" rowspan="5"></td>
<td height="15" colspan="10"> </td>
<td width="5" rowspan="5"></td>
</tr>
</table>
</td>
<td width="1" bgcolor="#9E9E9E"></td>
<td valign="top" width="190" background="images/erjiyemian/top_bg2.gif" style="background-repeat:repeat-x">
<table width="190" border="0" cellspacing="0" cellpadding="0">
<tr><td valign="bottom" height="22" background="images/sanjiyemian/right.gif" colspan="3"> <span style="color:#FFFFFF;"><b>最新更新</b></span></td></tr>
<tr>
<td width="5" rowspan="3"></td>
<td height="8"></td>
<td width="5" rowspan="3"></td>
</tr>
<tr>
<td><span style="line-height:18px;">
·<a href='./45946.html' title="深入了解J2ME的几个重要概念">深入了解J2ME的几个重要概念</a><br />·<a href='./45958.html' title="J2ME学习笔记(6)—连接MIDlet到文本文件">J2ME学习笔记(6)—连接MIDlet到文本文件</a><br />·<a href='./45959.html' title="J2ME学习笔记(5)—MIDlets中的图形编程">J2ME学习笔记(5)—MIDlets中的图形编程</a><br />·<a href='./45960.html' title="J2ME学习笔记(4)—用MIDPAPI开发MIDlets">J2ME学习笔记(4)—用MIDPAPI开发MIDlets</a><br />·<a href='./45961.html' title="J2ME学习笔记(3)—初次接触MIDlets">J2ME学习笔记(3)—初次接触MIDlets</a><br />·<a href='./45962.html' title="J2ME学习笔记(2)—平台体系结构详解">J2ME学习笔记(2)—平台体系结构详解</a><br />·<a href='./45963.html' title="J2ME学习笔记(1)—平台介绍及简单实例">J2ME学习笔记(1)—平台介绍及简单实例</a><br />·<a href='./45964.html' title="J2METimer-更简单的实现多任务调度执行">J2METimer-更简单的实现多任务调度执行</a><br />·<a href='./45965.html' title="J2ME基础知识">J2ME基础知识</a><br />·<a href='./45957.html' title="J2MEMIDP提供的最重要的图形元素">J2MEMIDP提供的最重要的图形元素</a><br />·<a href='./45956.html' title="精通J2ME中的HelloWorld">精通J2ME中的HelloWorld</a><br />·<a href='./45955.html' title="J2METimer使用指南">J2METimer使用指南</a><br />·<a href='./45947.html' title="请关注J2MEWTK2.2的新特性">请关注J2MEWTK2.2的新特性</a><br />·<a href='./45948.html' title="详细介绍并掌握J2ME的安全结构">详细介绍并掌握J2ME的安全结构</a><br />·<a href='./45949.html' title="如何使用“月蚀”进行J2ME开发">如何使用“月蚀”进行J2ME开发</a><br />·<a href='./45950.html' title="如何搭建J2ME的开发环境之一二">如何搭建J2ME的开发环境之一二</a><br />·<a href='./45951.html' title="J2ME编程实例---之数字键的测试">J2ME编程实例---之数字键的测试</a><br />·<a href='./45952.html' title="利用J2ME与ASP建立数据库连接">利用J2ME与ASP建立数据库连接</a><br />·<a href='./45953.html' title="J2ME平台构件及开发应用程序示例">J2ME平台构件及开发应用程序示例</a><br />·<a href='./45954.html' title="J2ME(CLDC/MIDP)简介">J2ME(CLDC/MIDP)简介</a><br />·<a href='./45966.html' title="关于J2MEMIDP1.0.3中的安全问题简述">关于J2MEMIDP1.0.3中的安全问题简述</a><br />·<a href='./45967.html' title="学习在J2ME中使用代码">学习在J2ME中使用代码</a><br />·<a href='./45979.html' title="J2ME的起源和发展历程">J2ME的起源和发展历程</a><br />·<a href='./45980.html' title="认识了解“J2ME”">认识了解“J2ME”</a><br />·<a href='./45981.html' title="探索J2ME:用GCF通信">探索J2ME:用GCF通信</a><br />·<a href='./45982.html' title="探索J2ME:使用记录管理系统">探索J2ME:使用记录管理系统</a><br />·<a href='./45983.html' title="探索J2ME:对记录进行排序">探索J2ME:对记录进行排序</a><br />·<a href='./45984.html' title="浅析J2EE、J2SE和J2ME">浅析J2EE、J2SE和J2ME</a><br />·<a href='./45985.html' title="J2ME应用基础">J2ME应用基础</a><br />·<a href='./45986.html' title="探索J2ME:创建开销细节表单">探索J2ME:创建开销细节表单</a><br /></span></td>
</tr>
</table>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -