import Javax.microedition.lcdui.Graphics;
import Javax.microedition.lcdui.Image;
//功能:實現圖片的高效翻轉
public class ImageUtil ...{
//無變化
public final static int TRANS_NONE = 0;
// 順時針翻轉90度
public final static int TRANS_ROT90 = 5;
//順時針翻轉180度
public final static int TRANS_ROT180 = 3;
//順時針翻轉270度
public final static int TRANS_ROT270 = 6;
// 水平鏡像翻轉
public final static int TRANS_MIRROR = 2;
//水平鏡像翻轉並順時針翻轉90度
public final static int TRANS_MIRROR_ROT90 = 7;
//水平鏡像翻轉並順時針翻轉180度
public final static int TRANS_MIRROR_ROT180 = 1;
//水平鏡像翻轉並順時針翻轉270度
public final static int TRANS_MIRROR_ROT270 = 4;
//@功能 實現圖片的翻轉
//@參數 Image srcImage 原圖
int transform 翻轉方向
//@返回值 轉換後的圖片
public static Image transformImage(Image srcImage, int transform) ...{
int srcW = srcImage.getWidth();
int srcH = srcImage.getHeight();
Image imgRet = null;
switch (transform) ...{
case TRANS_NONE:
imgRet = srcImage;
break;
case TRANS_ROT90:
...{
/* 原: 目標:
* 1234 951
* 5678 062
* 90ab a73
* b84
* */
int[] srcRGB = new int[srcW];
imgRet = Image.createImage(srcH, srcW);
Graphics g = imgRet.getGraphics();
for (int i = 0; i < srcH; i++) ...{
srcImage.getRGB(srcRGB, 0, srcW, 0, i, srcW, 1);
g.drawRGB(srcRGB, 0, 1, srcH - i - 1, 0, 1, srcW, true);
}
}
break;
case TRANS_ROT180:
...{
/* 原: 目標:
* 1234 ba09
* 5678 8765
* 90ab 4321
*
* */
int[] srcRGB = new int[srcW];
imgRet = Image.createImage(srcW, srcH);
Graphics g = imgRet.getGraphics();
for (int i = 0; i < srcH; i++) ...{
srcImage.getRGB(srcRGB, 0, srcW, 0, i, srcW, 1);
arrayExchange(srcRGB);
g.drawRGB(srcRGB, 0, srcW, 0, srcH-1-i, srcW, 1, true);
}
}
break;
case TRANS_ROT270:
...{
/* 原: 目標:
* 1234 48b
* 5678 37a
* 90ab 260
* 159
* */
int[] srcRGB = new int[srcW];
imgRet = Image.createImage(srcH, srcW);
Graphics g = imgRet.getGraphics();
for (int i = 0; i < srcH; i++) ...{
srcImage.getRGB(srcRGB, 0, srcW, 0, i, srcW, 1);
arrayExchange(srcRGB);
g.drawRGB(srcRGB, 0, 1, i, 0, 1, srcW, true);
}
}
break;
case TRANS_MIRROR:
...{
/* 原: 目標:
* 1234 4321
* 5678 8765
* 90ab ba09
*
* */
int[] srcRGB = new int[srcW];
imgRet = Image.createImage(srcW, srcH);
Graphics g = imgRet.getGraphics();
for (int i = 0; i < srcH; i++) ...{
srcImage.getRGB(srcRGB, 0, srcW, 0, i, srcW, 1);
arrayExchange(srcRGB);
g.drawRGB(srcRGB, 0, srcW, 0, i, srcW, 1, true);
}
}
break;
case TRANS_MIRROR_ROT90:
...{
/* 原: 目標:
* 1234 b84
* 5678 a73
* 90ab 062
* 951
* */
int[] srcRGB = new int[srcW];
imgRet = Image.createImage(srcH, srcW);
Graphics g = imgRet.getGraphics();
for (int i = 0; i < srcH; i++) ...{
srcImage.getRGB(srcRGB, 0, srcW, 0, i, srcW, 1);
arrayExchange(srcRGB);
g.drawRGB(srcRGB, 0, 1, srcH - i - 1, 0, 1, srcW, true);
}
}
break;
case TRANS_MIRROR_ROT180:
...{
/* 原: 目標:
* 1234 90ab
* 5678 5678
* 90ab 1234
*
* */
int[] srcRGB = new int[srcW];
imgRet = Image.createImage(srcW, srcH);
Graphics g = imgRet.getGraphics();
for (int i = 0; i < srcH; i++) ...{
srcImage.getRGB(srcRGB, 0, srcW, 0, i, srcW, 1);
g.drawRGB(srcRGB, 0, srcW, 0, srcH-1-i, srcW, 1, true);
}
}
break;
case TRANS_MIRROR_ROT270:
...{
/* 原: 目標:
* 1234 159
* 5678 260
* 90ab 37a
* 48b
* */
int[] srcRGB = new int[srcW];
imgRet = Image.createImage(srcH, srcW);
Graphics g = imgRet.getGraphics();
for (int i = 0; i < srcH; i++) ...{
srcImage.getRGB(srcRGB, 0, srcW, 0, i, srcW, 1);
g.drawRGB(srcRGB, 0, 1, i, 0, 1, srcW, true);
}
}
break;
default:
imgRet = srcImage;
break;
}
return imgRet;
}
//@功能 翻轉一個INT數組
//@參數 要轉換的INT數組
// @返回值 無
//
public static final void arrayExchange(int[] b)...{
int nCount = b.length;
int nLen = nCount/2;
nCount--;
for (int i = 0; i < nLen; i++) ...{
int nTemp = b;
b = b[nCount-i];
b[nCount-i] = nTemp;
}
}
}