资源大全 | 神秘文化 | 在线翻译 | QQ专区 | 视频教程 | 彩信频道 | 搜索引擎 | BT下载 |  | 网站地图
设为首页
加入收藏
联系站长
您现在的位置: 一百网络 >> JSP编程 >> J2ME >> 文档正文
最近更新
普通文档 移动开发:J2ME中定点库
普通文档 MIDlet生命周期的深入理
普通文档 移动开发:RMS概念解析与
普通文档 在基于MIDP的应用程序上
普通文档 教您如何在MIDP开发中实
普通文档 开发经验谈:贪吃蛇游戏
普通文档 J2ME学习系列之如何将J2
普通文档 教您如何解决J2ME开发中
普通文档 用实例讲解一个定制计数
普通文档 熟练使用J2ME在实际开发
推荐文章
  • 此栏目下没有推荐文档
  • 教您如何在MIDP开发中实现图片放缩

    文章作者:佚名 录入时间:2006-7-5 来源:不详
    网站声明:本站的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出处和原始作者,文章版权归本网站与文章作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。


    无论在MIDP1.0还是在MIDP2.0中,系统都没有给我们提供对图片进行伸缩操作的API。但是其实我们只要在程序代码中略施小计,就能达到这个效果,只是效果要比美术做出来的图片差,同时也会造成性能损失。

    伸缩图片的构造原理就是简单沿x,y轴按比例放缩,比如说我们需要把一张16*16的png图片转化成一张32*32的图片,那么我们可以先对该图片做一个水平方向上的拉伸操作,然后再把水平拉伸后的图片按垂直方向再做一次拉伸操作。

    做拉伸操作时,比如水平方向上,我们需要构造一张32*16的mutable Image,获取其Graphics,利用该Graphics,绘制该mutable Graphics的每一列像素,这一列像素就来自于原始图片中的按比例对应的某一列像素。垂直方向上的拉伸操作也是如法炮制。因为是一种按比例的对应关系,图像的缩小操作也可按该办法进行。

    效果如下图所示:



    原始图片




    图片放大为全屏幕大小




    图片缩小为原来的1/4大小,好了,我们来看代码:

    import javax.microedition.lcdui.Graphics; 
    
    import javax.microedition.lcdui.Image; 
    
    
    
    
    
    
    
    /** 
    
     * 图像工具类 
    
     * @author Jagie 
    
     * 
    
     */ 
    
    
    
    public class ImageUtil 
    
    { 
    
    
    
    
    
        /** 
    
         * 图像放缩方法 
    
         * @param srcImage 原始的Image对象 
    
         * @param newW 放缩后的Image的宽度 
    
         * @param newH 放缩后的Image的高度 
    
         * @return 放缩后的Image对象 
    
         */ 
    
    
    
        public static final Image scale 
    
    	(Image srcImage, int newW, int newH)
    
    	{ 
    
            int srcW = srcImage.getWidth(); 
    
            int srcH = srcImage.getHeight(); 
    
            //先做水平方向上的伸缩变换 
    
            Image tmp = Image.createImage(newW, srcH); 
    
            Graphics g = tmp.getGraphics(); 
    
             
    
         
    
            for (int x = 0; x < newW; x++)
    
    		{ 
    
                g.setClip(x, 0, 1, srcH); 
    
                //按比例放缩 
    
                g.drawImage
    
    			(srcImage,x-x*srcWnewW,0,Graphics.LEFT
    
    			| Graphics.TOP); 
    
                 
    
            } 
    
             
    
            //再做垂直方向上的伸缩变换 
    
            Image dst = Image.createImage(newW, newH); 
    
            g = dst.getGraphics(); 
    
             
    
             
    
            for (int y = 0; y < newH; y++)
    
    		{ 
    
                g.setClip(0, y, newW, 1); 
    
                //按比例放缩 
    
                g.drawImage
    
    			(tmp,0,y-y*srcHnewH,Graphics.LEFT 
    
    			| Graphics.TOP); 
    
             
    
            } 
    
             
    
            return dst;         
    
        } 
    
    
    
    
    
    }


    也许有同学会提出疑问,既然是按x,y方向按等比例放缩,那我写成这样岂不是代码更简洁:

    public static final Image scale2
    
    (Image srcImage, int newW, int newH) 
    
    { 
    
            int srcW = srcImage.getWidth(); 
    
            int srcH = srcImage.getHeight(); 
    
             
    
            Image dst=Image.createImage(newW,newH); 
    
            Graphics g=dst.getGraphics(); 
    
            for (int x = 0; x < newW; x++) 
    
    		{ 
    
                for (int y = 0; y < newH; y++)
    
    			{ 
    
                    g.setClip(x, y, 1, 1); 
    
                    g.drawImage(srcImage, 
    
    				x-x*srcWnewW, y - y * srcH 
    
    				/ newH, Graphics.LEFT 
    
                            | Graphics.TOP); 
    
    
    
                } 
    
    
    
            } 
    
    
    
            return dst; 
    
        }


    这种做法效果上和前者无异,但是并不可取,只要算算它的时间复杂度就知道,基本上是前者的平方。在我的机器上,做一次全屏幕的放缩操作,前者耗时60ms,而后者耗时7150ms。

  • 上一篇文档:

  • 下一篇文档:
  •     查找更多“教您如何在MIDP开发中实现图片放缩”的内容  
    相关连接
  • 移动开发:J2ME中定点库MathFP使用入门

  • MIDlet生命周期的深入理解及游戏死机问题

  • 移动开发:RMS概念解析与使用指南

  • 在基于MIDP的应用程序上使用JDBC

  • 开发经验谈:贪吃蛇游戏的MIDP实现核心