无花的空间--http://wuhua.3geye.net-- 您今天UCWEB了吗?--http://www.ucweb.com

当你来到我的空间的时候,你会看到很多Google,Nokia,Mobile,J2ME ,Android,3G,无线开发,手机软件,手机软件开发等与Google,手机相关的文章,你千万不要惊讶。这就是我一个专注Google,无线开发的无花。传播知识,分享经验,技术交流是我开空间的直接目的。当然如果有项目开发,我还是很希望赚点外快的。

用户操作
[即时聊天] [发私信] [加为好友]
无花ID:gooogledev
40562次访问,排名2971,好友20人,关注者24人。
J2EE 2年的开发时间,
J2ME 2年的开发时间
gooogledev的文章
原创 80 篇
翻译 0 篇
转载 3 篇
评论 201 篇
无花的公告

人要吃很多苦才可以长大!

踏实平凡人应该遵守的原则!

与我TM

gooogledev@gmail.com

友情链接

我的j2me创意

Wap浏览器的源代码

用自己写的rms引擎写的电话本

RSS订阅此博客  
用抓虾订阅此博客
用google订阅此博客
用bloglines订阅此博客
    网络封神榜 | 饶荣庆
最近评论
22:main()在哪个.java中
ant-shopping:I support author's viewpoint, hoped that will have later also more better articles,
abercrombie fitch handbag
ptsell:I support author's viewpoint, hoped that will have later also more better articles,
Balenciaga Bags
真的假的,屁股上的痣也能拍出来?
leo2012:奇怪,怎么下的wap explorer不能访问wap站点
文章分类
收藏
    相册
    j2me创意图片
    j2me教程
    我的照片
    我的链接
    3G视线
    EasyMF J2ME框架
    Lucene中国
    我的Google
    无花的博客
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创  如何在MIDP中实现图片放缩(转自linuxmine)收藏

    新一篇:  关于j2me game双缓冲实现探讨  | 旧一篇: 我再贡献一个游戏(雷电手机版)

    关键字: J2ME       
          设计游戏的朋友经常会遇到对图片资源的操作。今天浏览web发现此贴不错。所以抄过这边来
    原文:www.linuxmine.com/45911.html



    无论在midp1.0还是在 midp2.0中,系统都没有给我们提供对图片进行伸缩操作的api.但是其实我们只要在程序代码中略施小计,就能达到这个效果,只是效果要比美术做出来的图片,呵呵,差多啦,同时也会造成性能损失。伸缩图片的构造原理就是简单沿x,y轴按比例放缩,比如说我们需要把一张16*16的png图片转化成一张 32*32的图片,那么我们可以先对该图片做一个水平方向上的拉伸操作,然后再把水平拉伸后的图片按垂直方向再做一次拉伸操作。做拉伸操作时,比如水平方向上,我们需要构造一张32*16的mutable Image,获取其Graphics,利用该Graphics,绘制该mutable Graphics的每一列像素,这一列像素就来自于原始图片中的按比例对应的某一列像素。垂直方向上的拉伸操作也是如法炮制。因为是一种按比例的对应关系,图像的缩小操作也可按该办法进行。

    效果如下图所示
     

    原始图片

     

    图片放大为全屏幕大小


    图片缩小为原来的1/4大小


    好了,我们来看代码
    java 代码
     
       1.  import javax.microedition.lcdui.Graphics;  
       
    2import javax.microedition.lcdui.Image;  
       
    3.   
       
    4/** 
       5. * 图像工具类 
       6. * 
    @author Jagie 
       7. * 
       8. 
    */  
       
    9.   
      
    10public class ImageUtil {  
      
    11.   
      
    12/** 
      13. * 图像放缩方法 
      14. * 
    @param srcImage 原始的Image对象 
      15. * 
    @param newW 放缩后的Image的宽度 
      16. * 
    @param newH 放缩后的Image的高度 
      17. * 
    @return 放缩后的Image对象 
      18. 
    */  
      
    19.   
      
    20public static final Image scale (Image srcImage, int newW, int newH) {  
      
    21int srcW = srcImage.getWidth();  
      
    22int srcH = srcImage.getHeight();  
      
    23//先做水平方向上的伸缩变换  
      24. Image tmp = Image.createImage(newW, srcH);  
      
    25. Graphics g = tmp.getGraphics();  
      
    26.   
      
    27for (int x = 0; x < newW; x++) {  
      
    28. g.setClip(x, 01, srcH);  
      
    29//按比例放缩  
      30. g.drawImage(srcImage,x-x*srcWnewW,0,Graphics.LEFT | Graphics.TOP);  
      
    31.   
      
    32. }  
      
    33.   
      
    34//再做垂直方向上的伸缩变换  
      35. Image dst = Image.createImage(newW, newH);  
      
    36. g = dst.getGraphics();  
      
    37.   
      
    38for (int y = 0; y < newH; y++) {  
      
    39. g.setClip(0, y, newW, 1);  
      
    40//按比例放缩  
      41. g.drawImage(tmp,0,y-y*srcHnewH,Graphics.LEFT | Graphics.TOP);  
      
    42.   
      
    43. }  
      
    44.   
      
    45return dst;  
      
    46. }  
      
    47.   
      
    48.   
      
    49. }  
      
    50.   
      
    51. 也许有同学会提出疑问,既然是按x,y方向按等比例放缩,那我写成这样岂不是代码更简洁:  
      
    52.   
      
    53public static final Image scale2(Image srcImage, int newW, int newH) {  
      
    54int srcW = srcImage.getWidth();  
      
    55int srcH = srcImage.getHeight();  
      
    56.   
      
    57. Image dst=Image.createImage(newW,newH);  
      
    58. Graphics g=dst.getGraphics();  
      
    59for (int x = 0; x < newW; x++) {  
      
    60for (int y = 0; y < newH; y++) {  
      
    61. g.setClip(x, y, 11);  
      
    62. g.drawImage(srcImage, x-x*srcWnewW, y - y * srcH / newH, Graphics.LEFT  
      
    63| Graphics.TOP);  
      
    64.   
      
    65. }  
      
    66.   
      
    67. }  
      
    68.   
      
    69return dst;  
      
    70. }  



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



    其实上面的做法很简单,以后有需求可以整理成一个控件,这样就可以很方便的调用,与学习。
     

    发表于 @ 2007年03月31日 19:51:00|评论(loading...)|编辑

    新一篇:  关于j2me game双缓冲实现探讨  | 旧一篇: 我再贡献一个游戏(雷电手机版)

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 无花