- 浏览: 5789469 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
该方法网上可以找到,我添加了一个重载函数:
public Image getPalettedImage(String path, int[] originalColors,
int[] palettedColors)
三个参数依次为图片路径、需要改变的旧颜色值、新的颜色值,注意这2个参数都为数组,长度必须一致,这样可以一次改变多种颜色。
用法:
PalettedImage p=new PalettedImage();
Image newImage=p.getPalettedImage("/Humans121.png", new int[]{0x0000ff}, new int[]{0x00ff00});
...
g.drawImage(newImage, 0, 0, 0);
public Image getPalettedImage(String path, int[] originalColors,
int[] palettedColors)
三个参数依次为图片路径、需要改变的旧颜色值、新的颜色值,注意这2个参数都为数组,长度必须一致,这样可以一次改变多种颜色。
用法:
PalettedImage p=new PalettedImage();
Image newImage=p.getPalettedImage("/Humans121.png", new int[]{0x0000ff}, new int[]{0x00ff00});
...
g.drawImage(newImage, 0, 0, 0);
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import javax.microedition.lcdui.Image; public class PalettedImage { public Image getPalettedImage(String path, int[] originalColors, int[] palettedColors) { InputStream is = null; ByteArrayOutputStream baos = null; try { is = getClass().getResourceAsStream(path); baos = new ByteArrayOutputStream(); int ch = 0; while ((ch = is.read()) != -1) { baos.write(ch); } } catch (IOException ioe) { System.out.println(ioe); } finally { try { if (baos != null) baos.close(); if (is != null) is.close(); } catch (IOException e) { System.out.println(e); } } return getPalettedImage(baos.toByteArray(), originalColors, palettedColors); } /* * 原始图片的byte数组,以及需要替换颜色的颜色值还有目标颜色值就行了。 因为可以同时替换多个颜色,所以输入参数是代表颜色的整形的数组。 * 总之,要保证原始颜色与目标颜色一一对应就好了 */ public Image getPalettedImage(byte[] data, int[] originalColors, int[] palettedColors) { byte[] tempData = new byte[data.length]; System.arraycopy(data, 0, tempData, 0, data.length); Image img = null; int[] parameter = { 0, 0, 0 }; analyze(tempData, parameter); for (int i = 0; i < originalColors.length; i++) { replaceColor(tempData, parameter, originalColors[i], palettedColors[i]); } fillData(tempData, parameter); try { img = Image.createImage(tempData, 0, data.length); } catch (Exception e) { System.out.println("getPalettedImage && " + e.toString()); } return img; } private void analyze(byte[] data, int[] para) { int offset = 8; int chunkLen = 0; while (data[offset + 4] != 0x50 || data[offset + 5] != 0x4c || data[offset + 6] != 0x54 || data[offset + 7] != 0x45) { chunkLen = readInt(data, offset); offset += (4 + 4 + chunkLen + 4); } chunkLen = readInt(data, offset); para[2] = chunkLen / 3; para[0] = offset + 8; para[1] = offset + 8 + chunkLen; } private int readInt(byte[] data, int offset) { return ((data[offset] & 0xFF) << 24) | ((data[offset + 1] & 0xFF) << 16) | ((data[offset + 2] & 0xFF) << 8) | (data[offset + 3] & 0xFF); } private void replaceColor(byte[] data, int[] para, int oldColor, int newColor) { byte rr = (byte) ((oldColor >> 16) & 0xff); byte gg = (byte) ((oldColor >> 8) & 0xff); byte bb = (byte) (oldColor & 0xff); for (int i = 0, offset = para[0], temp = 0; i < para[2]; i++, offset += 3) { if (rr == data[offset] && gg == data[offset + 1] && bb == data[offset + 2]) { data[offset] = (byte) ((newColor >> 16) & 0xff); data[offset + 1] = (byte) ((newColor >> 8) & 0xff); data[offset + 2] = (byte) (newColor & 0xff); break; } } } private void fillData(byte[] data, int[] para) { int checksum = update_crc(data, para[0] - 4, para[2] * 3 + 4); data[para[1]] = (byte) ((checksum >> 24) & 0xff); data[para[1] + 1] = (byte) ((checksum >> 16) & 0xff); data[para[1] + 2] = (byte) ((checksum >> 8) & 0xff); data[para[1] + 3] = (byte) ((checksum) & 0xff); } private int update_crc(byte[] buf, int off, int len) { int c = 0xffffffff; int n, k; int xx; int[] crc_table = new int[256]; for (n = 0; n < 256; n++) { xx = n; for (k = 0; k < 8; k++) { if ((xx & 1) == 1) { xx = 0xedb88320 ^ (xx >>> 1); } else { xx = xx >>> 1; } } crc_table[n] = xx; } for (n = off; n < len + off; n++) { c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >>> 8); } return (c ^ 0xffffffff); } }
发表评论
-
3个RPG练习,最后一个是卡马克卷轴
2010-12-11 18:02 2323import javax.microedition.lcd ... -
j2me小练习,教学用
2010-12-07 20:42 1814有用的J2ME功能函数 ... -
自己早期做的一个基于j2me的飞行射击类游戏
2010-12-07 20:23 2076早期的代码,MVC思想 -
自己早期做的一个基于j2me的魔塔
2010-12-07 20:13 2085上面一个不完整,但代码好(MVC),但没抽出类; 下面一个比 ... -
j2me中的A*算法
2010-12-02 14:08 2032import javax.microedition.mid ... -
j2me代理连接返回码总是400的问题
2010-09-21 16:24 2742400是因为错误的语法导致服务器无法理解请求信息。 Con ... -
当显示内容过多时的滚屏类Container.java
2010-09-16 11:32 2142很多时候,由于手机屏幕太小,一下子显示不了那么多内容,这个时候 ... -
j2me读取中文的配置文件
2010-09-14 20:25 2146还可以参考这篇文章: http://gundumw100.it ... -
使用jsr172解析xml
2010-09-14 10:40 1937基类: import java.io.ByteArrayI ... -
面向对象的RMS操作
2010-09-14 10:29 1684将需要保存的数据集中起来形成一个model类,并且要实现序列化 ... -
Java版数独算法实现
2010-09-10 16:32 16327数独的历史: 数独前身为“九宫格”,最早起源于中国。数千 ... -
使用KXML解析xml数据
2010-09-10 13:05 9296最近做项目,服务器传过来的都是Xml格式的数据,需要解析xml ... -
类似小球列表的选择控件(9宫格)
2010-08-27 15:50 1729import javax.microedition.lcd ... -
j2me工具类:TextUtil.java
2010-08-11 21:24 1655import java.util.Vector; i ... -
j2me工具类:Database.java
2010-08-11 21:18 1998/** * <p>Title: & ... -
j2me工具类:ReadFromFile.java
2010-08-11 21:15 4295import java.io.*; import jav ... -
j2me竖向滚动菜单的基本做法
2010-08-11 16:58 1999public class AppCanvas extend ... -
j2me工具类:声音播放类SoundUtil
2010-06-04 23:21 2114用法: 将需要播放的音乐都罗列在name,type数组中,需要 ... -
地图编辑器Mappy下载
2010-05-25 22:30 3304简单的手机游戏地图编辑器,共享之。。。 eclipseme下 ... -
将Image对像转换为png格式的byte数组
2010-04-15 12:48 2602原理上说 1 获取Image 的ARGB数据 2将ARGB ...
相关推荐
郭可华J2ME实战教程:ppt和对应源码,非常好的入门材料!
J2ME游戏编程:TP319:G899 W511.iso 随书光盘,欢迎大家下载 大家共享^A^
这个游戏是基于是男人就下100层的理念,这是本人在j2me开发的学习过程中的一点心得体会。本资源用JBuilder可直接打开,并且注释齐全。其中还有打好的jar包,可直接放入手机运行,分辨率为240*320,提供给大家学习...
/* * 一个简单的俄罗斯方块游戏代码,代码中主要包含3个类: *TerrisMIDlet——MIDlet类 *GameCanvas——游戏界面类 *GameEngine——游戏逻辑类 *已经使用WTK2.5.2运行通过. */
分享:J2ME游戏代码 分享:J2ME游戏代码 分享:J2ME游戏代码分享:J2ME游戏代码 分享:J2ME游戏代码 分享:J2ME游戏代码分享:J2ME游戏代码 分享:J2ME游戏代码 分享:J2ME游戏代码分享:J2ME游戏代码 分享:J2ME...
J2ME开发的ppt,很实用,可以自学!
$兩小時精通Android開發之界面篇! 教你如何快速的開發Android遊戲~ 如果有J2me的底子,可以交妳怎麼移植J2me的遊戲
第一次运行JB2006开如J2ME时出现 ALERT: java/lang/ClassFormatError: Bad version information.错误 点“启动”就会出错 我现在找到了答案 请你们下去看
J2ME工具篇.rar
j2me入门:J2ME程序开发新手入门九大要点
J2ME源码:连连看 看到了就快下载吧,我不希望由于你的没下载而后悔!
j2me教程,比较基础,容易掌握,很容易上手,对初学者很有帮助。。
J2ME游戏 旧的简单J2ME游戏
实用J2ME记录库工具类,在很多代码中都要用到
j2me引擎J2ME 平台的游戏引擎
ToolME-0.2.0.zip j2me开发工具类
J2ME加载器 J2ME-Loader是适用于Android的J2ME模拟器。 它支持大多数2D游戏以及某些限制的3D(Mascot Capsule 3D游戏不起作用)。 仿真器具有虚拟键盘,每个应用程序的单独设置,扩展支持。 该项目是。 系统要求:...
J2me实用工具20合1
j2me网络类,http协议传输j2me网络类,http协议传输j2me网络类,http协议传输
J2ME-Loader Android application which runs J2ME apps http://4pda.ru/forum/index.php?showtopic=824201