在 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方法,就可以實現把圖片放倒啦~