4,生成点阵字库。这里我需要向大家推荐一款点阵字库生成软件:《特大点阵字库制作软件》。 其软件的使用截图如下
:
图上的dd.hzk文件就是我们生成的GB2312编码的汉字点阵字库。
5.将汉字点阵字库加载到程序中,代码如下:
public void initChineseFontByte() {
int ic;
InputStream in = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
byte[] buffer = new byte[1024];
try {
in = "".getClass().getResourceAsStream(ZK_PATH);
if (in != null) {
while ((ic = in.read(buffer)) > 0) {
dos.write(buffer, 0, ic);
}
chineseFontByte = baos.toByteArray();
in.close();
}
dos.close();
baos.close();
} catch (Exception e) {
System.out.println("getTextByUTF Error:" + e.toString());
} finally {
buffer = null;
in = null;
dos = null;
baos = null;
}
System.gc();
}
6,通过汉字的机内码查找在dd.hzk中找到相应的汉字字形码,并将其和汉字的机内码一起做数据持久化。
public byte[] getFontStream(String str) {
String subStr;
int[] fontCode = null;
byte[] fontShapeCode = null;
LinkedList<Integer> allFontCodingLk = new LinkedList<Integer>();
LinkedList<Byte> allFontShapeLk = new LinkedList<Byte>();
initChineseFontByte();
int len = str.length();
for (int i = 0; i < len; i++) {
char ch = str.charAt(i);
subStr = str.substring(i, i + 1);
fontCode = getByteCode(subStr);
if (fontCode.length < 2) {
System.out.println(ch);
} else {
fontShapeCode = read(fontCode[0], fontCode[1]);
if (fontShapeCode != null) {
allFontCodingLk.add((int) ch);
addByteToLinkedList(allFontShapeLk, fontShapeCode);
} else {
System.out.println(ch + " " + fontCode[0] + " "
+ fontCode[1]);
}
}
}
try {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(
outputStream);
dataOutputStream.writeByte(FontHeight);
dataOutputStream.writeByte(ChineseWidth);
int size = allFontCodingLk.size();
dataOutputStream.writeInt(size);
Integer[] allFondCode = new Integer[size];
allFontCodingLk.toArray(allFondCode);
for (int i = 0; i < size; i++) {
dataOutputStream.writeInt(allFondCode[i].intValue());
}
Byte[] allFontShapeCode = new Byte[allFontShapeLk.size()];
allFontShapeLk.toArray(allFontShapeCode);
for (int i = 0; i < allFontShapeCode.length; i++) {
dataOutputStream.writeByte(allFontShapeCode[i].byteValue());
}
return outputStream.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
7.输出到相应的文件中
public void generatesFontFile(byte[] b) {
try {
File file = new File("D:/J2ME/ToolFont/myFont.bin");
FileOutputStream out = new FileOutputStream(file);
try {
BufferedOutputStream buf = new BufferedOutputStream(out);
if (b != null) {
buf.write(b, 0, b.length);
}
buf.flush();
buf.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
程序执行如图:
8.编写加载部分字库的函数
static void initFontByte() {
try {
InputStream inputStream = "".getClass()
.getResourceAsStream(ZK_PATH);
DataInputStream dataInputStream = new DataInputStream(inputStream);
fontHeight = dataInputStream.readByte();
chineseCharWidth = dataInputStream.readByte();
NUM_OF_CH_CHAR = dataInputStream.readInt();
chineseFontCode = new int[NUM_OF_CH_CHAR];
for (int i = 0; i < NUM_OF_CH_CHAR; i++) {
chineseFontCode[i] = dataInputStream.readInt();
}
int oneChMSize = fontHeight * (((chineseCharWidth - 1) >> 3) + 1);
int allSize = oneChMSize * NUM_OF_CH_CHAR;
chineseShapeCode = new byte[allSize];
dataInputStream.read(chineseShapeCode, 0, allSize);
dataInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
10. 下面我需要最后添加一个函数,就是在对应的机内码集中将自己的汉字位置找出来。还记得上一节中,我们说的排序吗??? 这里在从机内码中将自己的汉字找出来,根据其排序采用二分查找,以此来加快程序的执行速度。根据机内码的位置,得到字形码的位置,将汉字绘制出来。
这个函数,我就不贴出来了,相信同仁是可以写出来的!!
谢谢大家的阅读!
- 大小: 42.9 KB
- 大小: 9.4 KB
分享到:
相关推荐
点阵字库是J2ME应用中一种特殊的字体资源,尤其对于游戏开发来说,非常重要。这种字库以像素为单位描绘字符形状,适用于低内存和低分辨率的设备。 点阵字库的工作原理是将每个字符以二维数组的形式存储,数组的每个...
**J2ME游戏引擎详解** Java 2 Micro Edition(J2ME)是Oracle公司为小型设备和嵌入式系统设计的一种Java平台。它主要用于移动设备,如早期的智能手机和平板电脑,提供运行Java应用程序的能力。在J2ME的环境中,游戏...
相比之下,J2ME作为早期的移动平台,其游戏引擎开发相对较少,但仍有大量的老旧设备和低端市场需要支持,因此开发J2ME游戏引擎仍具有一定的市场价值和技术挑战。 2.1 游戏引擎相关技术 2.1.1 编程语言技术要求 ...
J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏
在本文中,我们将深入探讨"j2me游戏引擎",特别是其强大的编辑器和光照效果在2D游戏开发中的应用。 一、J2ME游戏引擎概述 J2ME游戏引擎是专门针对J2ME平台构建的游戏开发框架,它简化了游戏的编程工作,提供了丰富...
**J2ME 物理引擎概述** ...总结,J2ME物理引擎如DyMiX_basic_0.1是移动游戏开发的重要组成部分,它为小型设备带来了丰富的动态体验。开发者可以通过深入研究和实践,掌握其使用方法,从而提升游戏的整体质量。
J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏
Java J2ME游戏引擎是为在Java Micro Edition (J2ME)平台上开发移动游戏而设计的一种软件框架。J2ME是一种轻量级的Java平台,主要用于嵌入式设备,如早期的智能手机和平板电脑,它提供了运行Java应用程序的能力,包括...
**J2ME斜45度游戏引擎** J2ME(Java 2 Micro Edition)是Java平台上的一种轻量级开发框架,主要用于移动设备和嵌入式系统的应用程序开发,其中包括游戏。在移动游戏领域,J2ME曾是开发手机游戏的重要工具,尤其是在...
1. **MIDP GUI(图形用户界面)**: J2ME 游戏通常使用 MIDP 提供的 LCDUI(Limited Connected Device User Interface)库来创建用户界面。这包括使用 Form、ChoiceGroup、ImageItem 和 Alert 等组件。 2. **Canvas ...
这个压缩包包含的“J2ME游戏开发资源”是一份宝贵的资料库,对于想要学习或从事J2ME游戏开发的人员来说极具价值。 在J2ME游戏开发中,以下几个核心知识点至关重要: 1. **基础环境搭建**:首先,开发者需要安装...
j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发
【j2ME游戏开发详解】 Java 2 Micro Edition(j2ME)是Oracle公司推出的用于开发和部署在小型设备、移动设备以及嵌入式系统上的应用程序的平台。它以其轻量级、跨平台的特性,成为了早期手机游戏开发的重要工具。本...
J2ME 游戏的用户界面通常使用 Wireless Toolkit (WTK) 提供的 LCDUI(Limited Connected Device Configuration User Interface)库。LCDUI 包含了一系列组件,如 Form、ChoiceGroup、TextBox 等,用于创建简单的图形...
本资源包含多款J2ME游戏的源代码,对于学习和理解移动游戏开发具有很高的价值。 1. **J2ME基础** J2ME由配置(Configurations)和 profiles 组成。配置定义了硬件和操作系统的基本特性,而profiles则进一步细化了...
**J2ME游戏开发入门详解** Java 2 Micro Edition(J2ME)是Java平台的一个子集,专门用于开发在移动设备和嵌入式系统上运行的应用程序,其中包括许多经典的游戏。本篇将通过分析提供的文件名来探讨J2ME游戏开发的...
《J2ME游戏开发中文教程》是一本专为Java ME(J2ME)平台上的游戏开发而设计的详细指南。J2ME,全称为Java 2 Micro Edition,是Java技术的一个分支,主要用于移动设备和嵌入式系统的应用程序开发,包括手机、智能...
我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我...