/**
* 對單張圖片畫,支撐翻轉,用於MIDP1.0中
* @param original Image 原始圖片
* @param g Graphics
* @param x int
* @param y int
* @param mode int 模式0:直接畫 0x2000:繞Y軸鏡象翻轉 0x4000:繞X軸鏡象翻轉
*/
public void drawClipImageForMIDP1(Graphics g, int x ,int y,Image original ,int mode)
{
int oldWidth = g.getClipWidth();
int oldHeight = g.getClipHeight();
int w = original.getWidth(), h = original.getHeight();
if(mode == 0)
{
g.drawImage(original,x,y,0);
}
if(mode == 0x2000)//繞Y軸旋轉
{
for (int i = 0; i < w; i++) {
g.setClip(x + i, y, 1, h);
g.drawImage(original, x - w + i * 2 + 1, y, 0);
}
}
else if(mode == 0x4000)//繞X軸旋轉
{
for (int i = 0; i < h; i++) {
g.setClip(x , y+ i, w, 1);
g.drawImage(original, x , y - h + i*2 + 1, 0);
}
}
g.setClip(0, 0, oldWidth, oldHeight);
}
/**
* drawClip 畫一個圖片的一部分,不支撐翻轉,用於MIDP1.0中
*
* @param g Graphics
* @param x int 要畫的地位x
* @param y int 要畫的地位y
* @param image Image 圖片
* @param clipX int clip在圖片中的坐標x
* @param clipY int clip在圖片中的坐標y
* @param clipWidth int clip在圖片中的寬度
* @param clipHeight int clip在圖片中的高度
*/
void drawClipImageForMIDP1(Graphics g, int x, int y, Image image, int clipX, int clipY, int clipWidth, int clipHeight) {
int oldWidth = g.getClipWidth();
int oldHeight = g.getClipHeight();
g.setClip(x, y, clipWidth, clipHeight);
g.drawImage(image, x - clipX, y - clipY, 0);
g.setClip(0, 0, oldWidth, oldHeight);
}
/**
* drawClip 畫一個圖片的一部分,並支撐翻轉,用於MIDP1.0中
*
* @param g Graphics
* @param x int 要畫的地位x
* @param y int 要畫的地位y
* @param image Image 圖片
* @param clipX int clip在圖片中的坐標x
* @param clipY int clip在圖片中的坐標y
* @param clipWidth int clip在圖片中的寬度
* @param clipHeight int clip在圖片中的高度
* @param mode int 0:不做任何轉換 0x2000:繞Y軸鏡象翻轉 0x4000:繞X軸鏡象翻轉
*/
void drawClipImageForMIDP1(Graphics g, int x, int y, Image image, intclipX, int clipY, int clipWidth, int clipHeight,int mode) {
int oldWidth = g.getClipWidth();
int oldHeight = g.getClipHeight();
if(mode == 0){//不作旋轉
g.setClip(x, y, clipWidth, clipHeight);
g.drawImage(image, x - clipX, y - clipY, 0);
}
else if(mode == 0x2000){//繞Y軸鏡象翻轉
for(int i = 0 ; i < clipWidth; i++)
{
g.setClip(x + i, y, 1, clipHeight);
g.drawImage(image, x + i - clipX - clipWidth + i + 1, y - clipY, 0);
}
}
else if(mode == 0x4000){//繞X軸鏡象翻轉
for(int i = 0 ; i < clipHeight; i++)
{
g.setClip(x , y+ i, clipWidth, 1);
g.drawImage(image, x -clipX, y + i*2 - clipY - clipHeight + 1, 0);
}
}
g.setClip(0, 0, oldWidth, oldHeight);
}
/**
* drawClip 畫一個圖片的一部分,並支撐翻轉,旋轉,重要用於NOKIA手機中。
*
* @param g Graphics
* @param x int 要畫的地位x
* @param y int 要畫的地位y
* @param image Image 圖片
* @param clipX int clip在圖片中的坐標x
* @param clipY int clip在圖片中的坐標y
* @param clipWidth int clip在圖片中的寬度
* @param clipHeight int clip在圖片中的高度
* @param mode int 0:直接畫 0x2000:繞Y軸鏡象翻轉 0x4000:繞X軸鏡象翻轉 90:順時針方向90度 180:順時針方向180度 270:順時針方向270度
*/
voiddrawClipImageFor諾基亞(Graphics g, int x, int y, Image image, int clipX,int clipY, int clipWidth, int clipHeight, int mode) {//只能用left和top畫。只方型有效。長方形待修正
int oldWidth = g.getClipWidth();
int oldHeight = g.getClipHeight();
if(mode==0)
{
g.setClip(x, y, clipWidth, clipHeight);
g.drawImage(image, x - clipX, y - clipY, 0);
}
else{
DirectGraphics dg=DirectUtils.getDirectGraphics(g);
switch(mode){ case 0x2000://繞Y軸翻轉
g.setClip(x, y, clipWidth, clipHeight);
x = x - (image.getWidth() - clipX - clipWidth);
y = y - clipY;
break;
case 0x4000:// 繞X軸翻轉
g.setClip(x, y, clipWidth, clipHeight);
x = x - clipX;
y = y - (image.getHeight() - clipY - clipHeight);
break;
case 90://順時針方向90度
mode = DirectGraphics.ROTATE_270 ;
g.setClip(x, y, clipHeight, clipWidth);
x = x-(image.getHeight() - clipY - clipHeight);
y = y-clipX;
break;
case 180://順時針方向180度
g.setClip(x, y, clipWidth, clipHeight);
x = x-(image.getWidth()-clipX-clipWidth);
y = y-(image.getHeight()-clipY-clipHeight);
break;
case 270://順時針方向270度
mode = DirectGraphics.ROTATE_90 ;
g.setClip(x, y, clipHeight, clipWidth);
x = x-clipY;
y = y-(image.getWidth() - clipX - clipWidth);
break;
}
dg.drawImage(image, x, y, 0,mode);
}
g.setClip(0, 0, oldWidth , oldHeight);
}
/**
* drawClipImageForMIDP2 畫一個圖片的一部分,支撐翻轉、旋轉。
* 本函數重要用於MIDP2.0中
* @param g Graphics
* @param x int 要畫的地位x
* @param y int 要畫的地位y
* @param image Image 圖片
* @param clipX int clip在圖片中的坐標x
* @param clipY int clip在圖片中的坐標y
* @param clipWidth int clip在圖片中的寬度
* @param clipHeight int clip在圖片中的高度
* @param mode int 0:直接畫 0x2000:繞Y軸翻轉 0x4000:繞X軸翻轉 90:順時針方向90度 180:順時針方向180度 270:順時針方向270度
* 由於NOKIA和MIDP2.0對應的把持常量值不一樣,為了保持一致以及移植方便,全部采用自定義的常量值,本函數對
* 自定義的常量值進行了到MIDP2.0的映射,希看大家應用時留心。
*
*/
public void drawClipImageForMIDP2(Graphics g, int x, int y, Image image,
int clipX, int clipY,int clipWidth, int clipHeight,int mode) {
int oldWidth = g.getClipWidth();
int oldHeight = g.getClipHeight();
Sprite sp;
int nm = 0;
switch(mode)
{
case 0://直接裁減
g.setClip(x, y, clipWidth,clipHeight );
nm = Sprite.TRANS_NONE;
x = x - clipX;
y = y - clipY;
break;
case 0x2000://繞Y軸鏡象翻轉
g.setClip(x, y, clipWidth,clipHeight );
nm = Sprite.TRANS_MIRROR;
x = x - (image.getWidth() - clipX - clipWidth);
y = y - clipY;
break;
case 0x4000://繞X軸鏡象翻轉
g.setClip(x, y, clipWidth,clipHeight );
nm = Sprite.TRANS_MIRROR_ROT180;
x = x - clipX;
y = y - image.getHeight() + clipY + clipHeight;
break;
case 90://順時針旋轉90
g.setClip(x, y,clipHeight, clipWidth );
nm = Sprite.TRANS_ROT90;
x = x-(image.getHeight() - clipY - clipHeight);
y = y-clipX;
break;
case 180://順時針旋轉180
g.setClip(x, y, clipWidth,clipHeight);
nm = Sprite.TRANS_ROT180;
x = x-(image.getWidth()-clipX-clipWidth);
y = y-(image.getHeight()-clipY-clipHeight);
break;
case 270://順時針旋轉270
g.setClip(x, y,clipHeight, clipWidth );
nm = nm | Sprite.TRANS_ROT270;
x = x-clipY;
y = y-(image.getWidth() - clipX - clipWidth);
break;
}
sp = new Sprite(image);
sp.setTransform(nm);
sp.setPosition(x,y);
sp.paint(g);
g.setClip(0, 0, oldWidth,oldHeight);
}