J2ME圖片顛倒,自己做了一個小小的矩陣轉秩方法

 

J2ME 裏,把本來好好呆着的 來,好像有個 Sprite 裏面封裝了一些方法。

本人 J2ME 幾天,昨天不知道有 回事, 了能把 片旋 轉過 來,自己做了個小方法

 

 

Image 中, getRGB 方法,是把 片的 RGB 色數 成一

用法是這樣: img .getRGB(srcRGB, 0, width, 0, 0, width, height );

具體參數含義可以參考 MIDP API 文檔。

 

本來 RGB 色數 2 ,存 1 時,還需要再知道 2 維數組的寬度,就可以還原了。

0 1 2 3 4 5 6 7 8 9 10 11, 如果知道寬度是 3 ,就能把這個 1 維數組還原爲 2 維的 0 1 2    3 4 5    6 7 8   9 10 11

 

 

Image 類中, 還有個方法createImage

是根據1維的RGB數組,將它轉換爲2維的顏色矩陣,以該顏色矩陣創建一個圖形。

用法是這樣:createRGBImage(srcRGB,width,height, true);

 

1維數組轉換爲矩陣的原理同上。

 

原圖片的RGB顏色矩陣能夠得到,要想顛倒就是把該矩陣轉換一下就好了。

 

比如將圖1

轉換爲圖2

 

即可以轉換到求矩陣的轉秩這個問題上。

 

 

我做的1維數組“假裝”是2維矩陣,返回結果爲1維數組,也“假裝”是2維矩陣的方法如下

 

    //1維數組假裝成矩陣,然後轉制
    private int[] arrAnti(int[] src,int width,int height)
    {
        int[] rst=new int[width*height];
        for(int i=0;i<width*height;i++)
        {

            rst[i]=src[i*width-(i/height)*(width*height-1)];
        }
        return rst;
    }

 

src是原數組,返回的rst是轉秩後的數組。

 

將這個數組應用到系統中,代碼如下:

 

package com.miao.anti;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class Anti extends MIDlet {
    Display dis;
    Image img=null;
    Image img1=null;
    MyCanvas mc=new MyCanvas();
   
    //1維數組假裝成矩陣,然後轉制
    private int[] arrAnti(int[] src,int width,int height)
    {
        int[] rst=new int[width*height];
        for(int i=0;i<width*height;i++)
        {

            rst[i]=src[i*width-(i/height)*(width*height-1)];
        }
        return rst;
    }
   
    public Anti() {
        dis=Display.getDisplay(this);
        try
        {
            img=Image.createImage("/img.png");
        }catch(Exception ex){}
       
        int width=img.getWidth();
        int height=img.getHeight();
       
        int[] srcRGB=new int[width*height];

        img.getRGB(srcRGB, 0, width, 0, 0, width,height);
        srcRGB=this.arrAnti(srcRGB, width, height);
        img1=Image.createRGBImage(srcRGB,height,width, true);
        dis.setCurrent(mc);
    }

    protected void pauseApp() {
        // TODO Auto-generated method stub

    }

    class MyCanvas extends Canvas{
        protected void paint(Graphics g) {
           
            g.drawImage(img,0,0,Graphics.LEFT|Graphics.TOP);
            g.drawImage(img1,100,0,Graphics.LEFT|Graphics.TOP);
        }
       
    }

}

 

運用了getRGB和createRGBImage這兩個API方法,

再加上自己做的arrAnti方法,就可以實現把圖片放倒啦~

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章