华中科技大学C语言课程设计——汉字点阵字库的建立
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2015 年 6 月 14 日
一. 具体分工任务 1.具体任务分工: ******负责以下内容:
(1)整个 JFrame(图形界面菜单)各项 Swing 组件的位置、大小、属性的 微调。 (2)FontSize(最大支持 96*96)、 FontColor(自定义颜色)类的编写 以及该功能显示的实现。 (3)自定义 RGB 色颜色功能实现。 (4)利用组件类所继承的 paint(Graphics g)的方法绘出矢量字体以及矢 量字模的放大显示的核心功能。 (5)BufferedImage 缓存图像中将单个字转换为十六进制点阵字模代码的 实现。 (6)代码区字符串的输出实现。 (7)横向扫描和竖向扫描功能的实现。 (8)KeyListener 与 ActionListener 对框架监听功能的父类的重写。 (9)软件后期的各项代码的整合、Debug。 (10) 后期修复各项发现的 BUG。
quweima[chinesec]=(byte)((quweima[chinesec]|768)>>>1); } 此段代码是将区位码装换为机内码(code)。Java中的code用一个长度为 2的byte数组表示的。将区码和位码分别加32,再通过java中的位操作通过左 移,右移等位操作将最高位置为1,最终将区位码转为机内码。进而通过java 中String类的构造方法 String(byte[] code, String charsetName)将编码转换为指定的字符编码 所对应的字符。
2、具体任务实施时间
(1)整体框架的构思、绘画以及布局,用时一周。 (2)汉字转换成十六进制代码的功能的讨论与制定、编写,用时一周。 (3)矢量字体以及点阵字体功能实现的思考以及编写,用时一周。 (4)字体各项参数(字体、风格、大小、颜色、扫描方向)功能的实现,用 时一周。 (5)输出字符串并分割、区位码获取字符、生成 bin 的 file 文件功能的实现, 用时一周。 (6)版本内容、UI(图标、背景) 、BUG 的发现、修改,用时一周。
开辟一个图像缓冲区,在缓冲区写字,并获得缓冲区像素 BufferedImage image = new BufferedImage(getsize(),getsize(),BufferedImage.TYPE_INT_RGB); Graphics g = image.createGraphics(); g.drawString(a,0,f.getAscent()-1); int[] p = image.getRGB(0,0,image.getWidth(),image.getHeight(),null,0,image.getWidth() );
4. JFileChooser类
JFileChooser 为用户选择文件提供了一种简单的机制。 chooser = new JFileChooser(new File(new File("").getAbsolutePath())); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); chooser.showSaveDialog(null); 当以上代码执行时,将会生成一个初始路径是程序所在路径的文件选择窗 口,在这里可以选择生成的字库文件所在的位置。
BufferedImage image = new BufferedImage(getsize(), getsize(), BufferedImage.TYP E_INT_RGB); Graphics g = image.createGraphics(); g.drawString(a,0,f.getAscent()-1); int[]p=image.getRGB(0, 0, image.getWidth(), image.getHeight(), null, 0, image.getWidth()); 使用此类在内存中开辟一个图像缓冲区,然后在此缓冲区内绘制矢量字体, 最后使用 bufferedimage 类中的方法 getRGB(),返回所选的图像部分的一个默 认颜色格式的整数像素数组。通过使用该类可以使获取点阵字模完全在内存中 实现,减少了不少的麻烦,同时也使程序的效率更高。
华中科技大学电子与科学技术系 课程设计终期报告
(2014——2015 年度第 2 学期)
名 题 院 班
称:
软件课程设计
目: 汉字点阵字库的建立与提取 系: 级: 光学与电子信息学院 ******** ******* 10 周 Crainax ****** ******
指导教师: 设计周数: 成员:
日期
3.GB2312 区位码转换为机内码(code)
byte quweima[]=new byte[2] ; quweima[0]=chinesea; quweima[1]=chineseb; for (int chinesec =0;chinesec<2;chinesec++) { quweima[chinesec]+=32; quweima[chinesec]=(byte)(quweima[chinesec]<<1);
通过使用GraphicsEnvironment类从而获得当前平台的字体,进而为下一步打好 基础。通过获得设备上可用的的字体而不是事先在程序编程过程中假设设备可 能有的字体,使得程序可以适应各种情况不一的设备。
2. BufferedImage类
BufferedImage 子类描述具有可访问图像数据缓冲区 image。
二. 软件编写使用的语言
软件主要使用 java 这一面向对象的程序语言编写,这样可以使用 java 丰 富的类,接口 ,从而减少软件开发的难度。另外 java 有着强大的异常处理
能力,进而提升的软件的稳定性。又由于 java 的良好的跨平台能力,使得 本程序能在多种平台上可靠有效的操作,而不仅仅限于在 window 系统上运 行。 Java 具有的完全面向对象开发设计、类的多态性、继承性、封装性、多 线程、异常处理机制、IO 流、GUI 的开发功能,使得 java 在很多方面胜于 C 语言。由于我们小组中在选择第一学期下的公选课时候,凭借着对编程的兴 趣,选择了华中科技大学计算机学院的胡兵老师的“Java 语言程序设计的入 门”这门公选课,其中包含的 SWING 组件和 Java 中一些强大的 API 类完全可 以驾驭该软件课程设计,最终我们决定使用 Java 语言完成该软件课程设计。最 后,我们觉得 JAVA 自带 Swing 组件容器框架显示比较粗糙,故我们后期打算 利用 Photoshop 设计出的自定义图标以及自定义渐变简约背景充当整个软件的 核心 UI 设计部分,并取得了成效,故在此终期报告中展示。 本次设计使用的编译工具是 Eclipse,JDK 版本为 8.0.450.14,java 语言版 本是 JavaTM 2 Platform Standard Ed. 5.0。
(7)获取任意区位码功能的实现,并应用于“一键生成所有汉字”、“一 键生成 GB2312wk.baidu.com、“自定义区位生成文件”功能的实现。 (8)File 类异常的编写,防止重名功能的实现。 (9)Main 函数的书写。 (10) 各种错误对话框的静态调用功能的实现。
****负责以下内容:
(1) 利用 PhotoShop 设计程序图标。 (2) 利用 PhotoShop 设计程序背景图片。 (3) 版本内容的撰写。 (4) 终期报告的书写。 (5) 程序代码注释的书写。 (6) 整个可视化框架草图的绘画。 (7) 异常时候弹出的对话框内容的书写。
判断像素着色情况 p[ i*image.getWidth()+j]!=-1?"1":"0";
写文件 fileout.writeByte(p[i]);
四. 实现功能使用的主要类、接口、方法。 1.GraphicsEnvironment 类
GraphicsEnvironment 类描述了 Java(tm) 应用程序在特定平台上可用的 GraphicsDevice 对象和 Font 对象的集合。 GraphicsEnvironment enironment; enironment =GraphicsEnvironment.getLocalGraphicsEnvironment(); String [ ] fontname=enironment.getAvailableFontFamilyNames();
二.软件界面
三.软件的框架
获取系统字体 GraphicsEnvironment enironment; enironment =GraphicsEnvironment.getLocalGraphicsEnvironment(); fontname=enironment.getAvailableFontFamilyNames();
tname.getSelectedItem()+(String)boxfontsize.getSelectedItem()+ (String)boxfontstyle.getSelectedItem()+".bin"); String shurustring=jTextFieldshurukuang2.getText(); String []shuruStrings=new String[shurustring.length()]; for (int a=0;a<shurustring.length();a++) { shuruStrings[a]=shurustring.substring(a,a+1); } wenben2set("//生成字符串: "+jTextFieldshurukuang2.getText()); File file =new File(jTextFieldshurukuang3.getText(),fileString); file.delete(); file =new File(jTextFieldshurukuang3.getText(),fileString); try { fileout = new DataOutputStream(new FileOutputStream(file,true)); for(int k=0;k<shuruStrings.length;k++) { int p[]=GetCode(shuruStrings[k]); try { for(int a=0;a<p.length;a++ ) fileout.writeByte(p[a]); } catch (IOException e1) { e1.printStackTrace(); } try { fileout.close(); } catch (IOException e1) { e1.printStackTrace(); } } catch (FileNotFoundException e2) { e2.printStackTrace(); } } KeyListener用于接收键盘事件(击键)的侦听器接口。旨在处理键盘事件
5.
File、 DataOutputStream类
数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流 中。 File file =new File(jTextFieldshurukuang3.getText(),fileString); file.createNewFile(); fileout = new DataOutputStream(new FileOutputStream(file,true)); fileout.writeByte(p[i]); fileout.close(); 当运行上述代码以后,将会创建一个文件,同时创建一个数据输出流, 将储存在数组中的数据以二进制的形式写进文件,最后关闭数据流。 6.
ActionListener,KeyListener接口
ActionListener用于接收操作事件的侦听器接口。对处理操作事件感兴趣的 类可以实现此接口,而使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册。在发生操作事件时,调用该对象的 actionPerformed 方法。 具体代码如下: (该处以生成字符串按钮功能实现举例) if(jButtonqueding2==e.getSource()) { jTextFieldshurukuang1.setText(""); String fileString=new String("“"+jTextFieldshurukuang2.getText()+"”_"+(String)boxfon
******负责以下内容:
(1)获取系统环境所有字体的实现(不局限于宋体、黑体等基本字体) 。 (2)FontName(支持系统所有字体) 、FontStyle(字体的四大风格)类的 编写以及该功能显示的实现。 (3)JFileChooser 类的实现以及优化,能自定义选择一个存放字库文件 的文件夹。 (4)分割字符串为各个字符的实现。 (5)输入字符串生成.bin 文件的实现。 (6)各种细节的优化算法的提出以及优化。