最近有个需求要取汉字的字模,但是大部分都是C++\Delphi的实现,参考其他范例也实现了一个Delphi取模的方法,但感觉不是非常方便,尤其是在文字的缩放,变形的方面。JAVA里面图片处理的类貌似非常方便,于是也想对照写了一个测试类,非常好用。
基本思路:根据汉字字体等参数将汉字绘到64X64的图层上,然后分将该图层分成很想16X16的图片。然后对每个图片上的每个像素点取值相加,如果大于阀值则标记该点。这样循环取出16X16的点阵。具体实现的时候可以根据实际需要将图层分辨率、取模比例等进行调整,并且也可以使用JAVA的图像处理方法对汉字进行缩放等。本类中只实现了对汉字的横向、纵向缩放。下面是实现类:
package com.strong;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class JavaZiMo {
private static int intKuan = 64;
private static int intGao = 64;
private static int intSuoFangKuan = 1; // 横向缩放比例如 1.01 0.9
private static int intSuoFangGao = 1; // 纵向缩放比例如 1.01 0.9
private static int intFaZhi = -16; // 显示阀值
private static String strShuRu = "胡"; // 待取字模
private static String strZiTi = "文泉驿正黑"; // 待取字体
public JavaZiMo() {
}
public static void main(String[] args) {
BufferedImage image = new BufferedImage(intKuan, intGao, BufferedImage.TYPE_INT_BGR);
Graphics2D g = image.createGraphics();
Font myFont = new Font(strZiTi, Font.BOLD, 64); // 定义字体样式
g.setFont(myFont); // 设置字体
g.fillRect(0, 0, intKuan, intGao); // 绘制背景
g.setColor(new Color(0, 0, 0)); // 设置字体颜色
g.scale(intSuoFangKuan, intSuoFangGao); // 设置缩放
g.drawString(strShuRu, 0, 54);
g.dispose();
// 生成图片文件
// File f1 = new File("/tmp/11.jpg");
// try {
// ImageIO.write(image, "JPG", f1);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
BufferedImage bi[] = new BufferedImage[16 * 16];
int intDianZhen[] = new int[16 * 16];
for (int i = 0; i < 16; i++) {
for (int j = 0; j < 16; j++) {
bi[i * 16 + j] = image.getSubimage(i * 4, j * 4, 4, 4);
}
}
for (int i = 0; i < bi.length; i++) {
int intD = 0;
for (int j = 0; j < 4; j++) {
for (int k = 0; k < 4; k++) {
intD += bi[i].getRGB(j, k);
}
}
intDianZhen[i] = intD;
}
// intDianZhen是实际的像素值数组,为了方便使用下面再用一个循环取字模,实际可以和上面合并
for (int i = 0; i < 16; i++) {
StringBuffer sb = new StringBuffer();
for (int j = 0; j < 16; j++) {
if (intDianZhen[i + j * 16] < intFaZhi) {
sb.append("■");
} else {
sb.append("-");
}
}
System.out.println(sb.toString());
}
}
}
运行后在控制台输出如下:
----■■----------
----■■---■■■■■■■
----■■---■■■■■■■
■■■■■■■■■■■--■■■
■---■■--■■■--■■■
----■■---■■■■■■■
----■■---■■--■■■
--■■■■■■-■■--■■■
--■■--■■-■■■■■■■
--■■--■■-■■■■■■■
--■■--■■-■■--■■■
--■■■■■■■■■--■■■
--■■--■■■■■--■■■
--■■--■■■■---■■■
-----■■■■--■■■■■
------■■----■■--
分享到:
相关推荐
实现在输入框输入一个汉字字符就能获取该汉字在HZK16里的字模数据
取字模软件是点阵制作中很实用的一个软件,希望对大家有所帮助。。。
8X8点阵取字模软件,单片机显示取字模,十分方便
5110LCD取字模软件 5110LCD取字模软件
取字模软件Zimo21
zimo21取字模zimo21取字模zimo21取字模zimo21取字模zimo21取字模
PCtoLCD2002-OLED取字模工具
取字模软件,zimo21取字模 此软件生成的点阵库见下图,完全符合点阵液晶的使用。 MSB>>>>>>>>>MSB :::::::::::::: 8位 :::::::::::::: LSB>>>>>>>>>LSB
好用的点阵屏取字模软件!挺好用的,拿出来分享
液晶取字模软件 应用软件 1602 12864 可以将需要在12864、1602液晶显示屏上显示的文字图形转化成相应的二进制代码。
一款取字模软件 功能介绍: 1.生成中英文数字混合的字符串的字模数据. 2.可选择字体,大小,并且可独立调整文字的长和宽,生成任意形状的字符。 3.各种旋转,翻转文字功能 4.任意调整输出点阵大小,并任意调整...
诺基亚5110液晶取字模软件,写代码的好工具
取字模软件,可输入字符生成字模,用于程序中的汉字、字母显示。
软件包中的文件ee.c作为一个简单例程供提取测试用。 2。提取以后的点阵码可以随意修改点阵数据,使用鼠标的左键为加一点,右键为擦除一点。 修改完毕请按旁边的确认键将数据记录到点阵码中,否则您的修改将自动...
lcd取字模软件非常好用的软件啊,玩单片机用得上啊!!!
取字模软件 A51 C51 格式取模
12864取字模软件,很方便就可以得到了点阵的字模!
常用的LCD的取字模软件,1.将您需要的汉字和符号集中形成一个文本文件 2.使用“导入文本”的按钮 3.确认“生成二进制字库”被选中(建议选中"生成索引文件"原因后析) 4.点“开始生成”按钮,选择生成的字库文件名 ...
字模提取软件,包括取字模,图像字模提取软件,欢迎下载