`
java-mans
  • 浏览: 11437024 次
文章分类
社区版块
存档分类
最新评论

J2ME 拼图游戏 快速开发 全过程 之代码祥解(4 )——图片操作类、图片预览后处理类

 
阅读更多

图片操作类(转自网上),代码:

package cn.edu.xtu.tilepuzzle.model;


import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;


public class PhotoOperations {
/*
* 图片上添加字符
*/
public static Image effect_image_add_str(Image src, String str, int x_pos,int y_pos) {
Image temp = Image.createImage(src.getWidth(), src.getHeight());
Graphics g = temp.getGraphics();
g.drawImage(src, 0, 0, Graphics.LEFT | Graphics.TOP);
g.setColor(100, 100, 245);
g.setFont(Font.getDefaultFont());
g.drawString(str, x_pos, y_pos, Graphics.LEFT | Graphics.TOP);
return temp;
}


/*
* 图片剪切,cut_xpos,cut_ypos 切割框的起始位置坐标,cut_width,cut_height 切割框的宽与高
*/
public static Image effect_cut(Image src, int cut_xpos, int cut_ypos,
int cut_width, int cut_height) {
// System.out.println("已进入截图方法 effect_cut");
int srcW = src.getWidth();
int srcH = src.getHeight();
// System.out.println("图片的宽:"+srcW+" 高:"+srcH);
int[] srcPixels = getPixels(src);
int[] desPixels = new int[cut_width * cut_height];
// System.out.println("1233333333");
int num = 0;
for (int i = 0; i < srcH; i++) {
if (i >= cut_ypos && i < cut_height + cut_ypos) {
for (int ii = 0; ii < srcW; ii++) {
if (ii >= cut_xpos && ii < cut_width + cut_xpos) {
desPixels[num] = srcPixels[i * srcW + ii];
num++;
// System.out.println("num="+num);
}
}
}
}
return drawPixels(desPixels, cut_width, cut_height);
}


/*
* 获取图片RGB数据,并返回大小为width*height大小的一维数组
*/
public static int[] getPixels(Image src) {
// System.out.println("=====");
int w = src.getWidth();
int h = src.getHeight();
int[] pixels = new int[w * h];
src.getRGB(pixels, 0, w, 0, 0, w, h);
// System.out.println("RGB的长度 = "+pixels.length);
return pixels;
}


/*
* 将pixels[]里的数据,生成一张图片,图片宽为w,高为h
*/
public static Image drawPixels(int[] pixels, int w, int h) {
Image image = Image.createRGBImage(pixels, w, h, true);
// images[iTemp][jTemp] = Image.createRGBImage(pixels, w, h, true);
pixels = null;
return image;
// return images[iTemp][jTemp];
}


/*
* 图片特效蒙版
*/
public static Image effect_hoodwink(Image src) {
int srcW = src.getWidth();
int srcH = src.getHeight();
int[] srcPixels = getPixels(src);
int r = 0;
int g = 0;
int b = 0;
int a = 0;
int argb;


for (int i = 0; i < srcH; i++) {
for (int ii = 0; ii < srcW; ii++) {
argb = srcPixels[i * srcW + ii];
a = ((argb & 0xff000000) >> 24); // alpha channel
r = ((argb & 0x00ff0000) >> 16); // red channel
g = ((argb & 0x0000ff00) >> 8); // green channel
b = (argb & 0x000000ff); // blue channel
r = (int) (.299 * r);
g = (int) (.587 * g);
b = (int) (.114 * b);
srcPixels[i * srcW + ii] = ((a << 24) | (r << 16) | (g << 8) | b);
}
}
return drawPixels(srcPixels, srcW, srcH);
}


/*
* 创建字符图片
*/
public static Image image_add_str(int width,float numLineHeight,Font font,String str[]) {
int lineHeight=font.getHeight();

int height=(int) (lineHeight*numLineHeight);
System.out.println("一行高:"+height);
Image temp = Image.createImage(width, height);
Graphics g = temp.getGraphics();
g.setColor(255, 255, 190);
g.fillRect(0, 0, width, height);

g.setFont(font);
g.setColor(0x000000FF);

int len[]=new int[3];
for(int i=0;i<3;i++){
len[i]=font.stringWidth(str[i]);
}
int xSpace=(width-(len[0]+len[1]+len[2]))/4;

g.drawString(str[0], xSpace, lineHeight/4 , Graphics.LEFT | Graphics.TOP);
g.drawString(str[1], 2*xSpace+len[0], lineHeight/4 , Graphics.LEFT | Graphics.TOP);
g.drawString(str[2], 3*xSpace+len[0]+len[1],lineHeight/4 , Graphics.LEFT | Graphics.TOP);
//g.drawString(str, x_pos, y_pos, Graphics.LEFT | Graphics.TOP);
return temp;
}

/**
* 图像放缩方法
* @param srcImage 原始的Image对象
* @param newW 放缩后的Image的宽度
* @param newH 放缩后的Image的高度
* @return 放缩后的Image对象
*/

public static final Image scale(Image srcImage, int newW, int newH) {
int srcW = srcImage.getWidth();
int srcH = srcImage.getHeight();
// 先做水平方向上的伸缩变换
Image tmp = Image.createImage(newW, srcH);
Graphics g = tmp.getGraphics();
for (int x = 0; x < newW; x++) {
g.setClip(x, 0, 1, srcH);
// 按比例放缩
g.drawImage(srcImage, x - x * srcW / newH, 0, Graphics.LEFT | Graphics.TOP);
}


// 再做垂直方向上的伸缩变换
Image dst = Image.createImage(newW, newH);
g = dst.getGraphics();


for (int y = 0; y < newH; y++) {
g.setClip(0, y, newW, 1);
// 按比例放缩
g.drawImage(tmp, 0, y - y * srcH / newH, Graphics.LEFT | Graphics.TOP);
}
return dst;
}
}

图片预览后处理类,代码:

package cn.edu.xtu.tilepuzzle.model;




import java.io.IOException;
import java.util.Vector;


import javax.microedition.lcdui.*;


import cn.edu.xtu.tilepuzzle.GameDB;
import cn.edu.xtu.tilepuzzle.contorller.MainUIController;
import cn.edu.xtu.tilepuzzle.ui.PhotoListUI;


public class ClassSetPhoto {


MainUIController mainUIController;
Display display;
BoardModel boardModel;
Displayable displayable;


String orgImageString;

public ClassSetPhoto(MainUIController mainUIController,BoardModel boardModel,Display display,Displayable displayable) {
this.boardModel=boardModel;
this.display=display;
this.displayable=displayable;
this.mainUIController=mainUIController;
}

public void showList(){
try {
ListTest();
} catch (IOException e) {
e.printStackTrace();
}
}


private void ListTest() throws IOException {
String iconString="";
Vector MM = new Vector();
for (int i = 0; i < GameDB.MM_NUMBERS; i++) {
/*try {
//System.out.println(DataBase.rootMMPath+"yu"+(1+i)+".jpg");
icon=Image.createImage(DataBase.rootMMPath+"yu"+(1+i)+".jpg");
} catch (IOException e) {
e.printStackTrace();
System.out.println("图片获取失败!!!!");
}
System.out.println("====="+icon.toString());
*/
iconString=GameDB.rootMMPath+"yu"+(1+i)+".jpg";
//System.out.println(iconString);
MM.addElement(new ClassListItem(null,GameDB.rootMMPath+(1+i)+".jpg",iconString,"美女"+Integer.toString(i+1),ClassListItem.ITEM,false,GameDB.IndexInItemList_MM));
}
Vector CHUANGYI = new Vector();
for (int i = 0; i < GameDB.CHUANGYI_NUMBERS; i++) {
/* try {
icon=Image.createImage(DataBase.rootCHUANGYIPath+"yu"+(1+i)+".jpg");
} catch (IOException e) {
e.printStackTrace();
}
*/
iconString=GameDB.rootCHUANGYIPath+"yu"+(1+i)+".jpg";
CHUANGYI.addElement(new ClassListItem(null,GameDB.rootCHUANGYIPath+(1+i)+".jpg",iconString,"创意"+Integer.toString(i+1),ClassListItem.ITEM,false,GameDB.IndexInItemList_CHUANGYI));
}
Vector DONGMAN = new Vector();
for (int i = 0; i < GameDB.DONGMAN_NUMBERS; i++) {
/*try {
icon=Image.createImage(DataBase.rootDONGMANPath+"yu"+(1+i)+".jpg");
} catch (IOException e) {
e.printStackTrace();
}*/
iconString=GameDB.rootDONGMANPath+"yu"+(1+i)+".jpg";
DONGMAN.addElement(new ClassListItem(null,GameDB.rootDONGMANPath+(1+i)+".jpg",iconString,"动漫"+Integer.toString(i+1),ClassListItem.ITEM,false,GameDB.IndexInItemList_DONGMAN));
}
Vector ZIHUA = new Vector();
for (int i = 0; i < GameDB.ZHIHUA_NUMBERS; i++) {
/*try {
icon=Image.createImage(DataBase.rootZIHUAPath+"yu"+(1+i)+".jpg");
} catch (IOException e) {
e.printStackTrace();
}*/
iconString=GameDB.rootZIHUAPath+"yu"+(1+i)+".jpg";
ZIHUA.addElement(new ClassListItem(null,GameDB.rootZIHUAPath+(1+i)+".jpg",iconString,"书法"+Integer.toString(i+1),ClassListItem.ITEM,false,GameDB.IndexInItemList_ZIHUA));
}
Vector OTHER = new Vector();
for (int i = 0; i < GameDB.OTHER_NUMBERS; i++) {
/*try {
icon=Image.createImage(DataBase.rootZIHUAPath+"yu"+(1+i)+".jpg");
} catch (IOException e) {
e.printStackTrace();
}*/
iconString=GameDB.rootOTHERPath+"yu"+(1+i)+".jpg";
OTHER.addElement(new ClassListItem(null,GameDB.rootOTHERPath+(1+i)+".jpg",iconString,"其它"+Integer.toString(i+1),ClassListItem.ITEM,false,GameDB.IndexInItemList_ZIHUA));
}
Vector v=new Vector();
v.addElement(new ClassListItem(MM,null,null,"美女",ClassListItem.GROUP,false,GameDB.IndexInItemList_MM));
v.addElement(new ClassListItem(CHUANGYI,null,null,"创意",ClassListItem.GROUP,false,GameDB.IndexInItemList_CHUANGYI));
v.addElement(new ClassListItem(DONGMAN,null,null,"动漫",ClassListItem.GROUP,false,GameDB.IndexInItemList_DONGMAN));
v.addElement(new ClassListItem(ZIHUA,null,null,"书法",ClassListItem.GROUP,false,GameDB.IndexInItemList_ZIHUA));
v.addElement(new ClassListItem(OTHER,null,null,"其它",ClassListItem.GROUP,false,GameDB.IndexInItemList_OTHER));
display.setCurrent(new PhotoListUI("图片列表",Choice.IMPLICIT,v,mainUIController,boardModel,display,displayable));
}


}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics