<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    路是爬出來的

    如何在MIDP中實現圖片放縮(轉自linuxmine)

          設計游戲的朋友經常會遇到對圖片資源的操作。今天瀏覽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;  

    2. import javax.microedition.lcdui.Image;  

    3.   

    4. /** 

    5. * 圖像工具類 

    6. * @author Jagie 

    7. * 

    8. */  

    9.   

    10. public class ImageUtil {  

    11.   

    12. /** 

    13. * 圖像放縮方法 

    14. * @param srcImage 原始的Image對象 

    15. * @param newW 放縮后的Image的寬度 

    16. * @param newH 放縮后的Image的高度 

    17. * @return 放縮后的Image對象 

    18. */  

    19.   

    20. public static final Image scale (Image srcImage, int newW, int newH) {  

    21. int srcW = srcImage.getWidth();  

    22. int srcH = srcImage.getHeight();  

    23. //先做水平方向上的伸縮變換  

    24. Image tmp = Image.createImage(newW, srcH);  

    25. Graphics g = tmp.getGraphics();  

    26.   

    27. for (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.   

    38. for (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.   

    45. return dst;  

    46. }  

    47.   

    48.   

    49. }  

    50.   

    51. 也許有同學會提出疑問,既然是按x,y方向按等比例放縮,那我寫成這樣豈不是代碼更簡潔:  

    52.   

    53. public static final Image scale2(Image srcImage, int newW, int newH) {  

    54. int srcW = srcImage.getWidth();  

    55. int srcH = srcImage.getHeight();  

    56.   

    57. Image dst=Image.createImage(newW,newH);  

    58. Graphics g=dst.getGraphics();  

    59. for (int x = 0; x < newW; x++) {  

    60. for (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.   

    69. return dst;  

    70. }  







    這種做法效果上和前者無異,但是并不可取,只要算算它的時間復雜度就知道,基本上是前者的平方。在我的機器上,做一次全屏幕的放縮操作,前者耗時60ms,而后者耗時7150ms。







    其實上面的做法很簡單,以后有需求可以整理成一個控件,這樣就可以很方便的調用,與學習。

    posted on 2006-12-30 09:24 路是爬出來的 閱讀(88) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产成人免费一区二区三区| 一二三四在线观看免费高清中文在线观看 | 乱淫片免费影院观看| 国产成人精品免费视频大全五级| 亚洲天堂男人影院| 野花高清在线观看免费3中文| 77777午夜亚洲| 欧洲精品免费一区二区三区| 亚洲私人无码综合久久网| 热久久精品免费视频| 亚洲经典千人经典日产| 国产18禁黄网站免费观看| 一区二区三区免费在线视频| 亚洲性日韩精品一区二区三区| v片免费在线观看| 亚洲国产另类久久久精品黑人| 鲁丝片一区二区三区免费| 亚洲男人的天堂在线播放| 黄色免费网站网址| 亚洲精品宾馆在线精品酒店| 亚洲国产一区视频| 少妇人妻偷人精品免费视频| 亚洲一区二区三区精品视频| 国产精品色午夜视频免费看| 一本到卡二卡三卡免费高| 亚洲成色WWW久久网站| 国产成人yy免费视频| 亚洲日韩在线中文字幕综合 | 精品久久洲久久久久护士免费| 特级毛片爽www免费版| 亚洲av中文无码乱人伦在线r▽| 亚洲黄色免费在线观看| 亚洲精品成a人在线观看☆| 国产亚洲自拍一区| 五月婷婷综合免费| 国产成人1024精品免费| 亚洲婷婷在线视频| 亚洲国产婷婷综合在线精品| 9277手机在线视频观看免费| 亚洲成a人片在线不卡一二三区 | 亚洲国产精品13p|