java用字符写字符
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.GraphicsEnvironment; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; public class CharWrittenInChar { public static void main(String[] args) { new CharWrittenInChar(); } Scanner cin = new Scanner(System.in); char foreChar = '●', backChar = '○', writing = '福'; BufferedImage pic; Font[] font; int from, to, cur;// 字体从哪里开始到哪里结束 int width = 40, height; BufferedImage getPic() { Font f = new Font(font[cur].getName(), Font.BOLD, 150); BufferedImage bit = new BufferedImage(1000, 1000, BufferedImage.TYPE_3BYTE_BGR); Rectangle2D rec = bit.getGraphics().getFontMetrics(f).getStringBounds("" + writing, bit.getGraphics()); bit = new BufferedImage((int) rec.getWidth() + 1, 1 + (int) rec.getHeight(), BufferedImage.TYPE_3BYTE_BGR); Graphics gg = bit.getGraphics(); gg.setColor(Color.black); gg.fillRect(0, 0, bit.getWidth(), bit.getHeight()); gg.setFont(f); gg.setColor(Color.RED); gg.drawString("" + writing, 0, gg.getFontMetrics(f).getAscent()); return bit; } void draw(BufferedImage bit, FileOutputStream file) throws IOException { height = bit.getHeight() * width / bit.getWidth(); BufferedImage pic = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR); pic.getGraphics().drawImage(bit, 0, 0, width, height, null); String s = "\n\n\n" + font[cur].getName() + "------------\r\n\r\n"; for (int j = 0; j < pic.getHeight(); j++) { for (int i = 0; i < pic.getWidth(); i++) { int k = pic.getRGB(i, j); if (k == -65536) { s += foreChar; } else { s += backChar; } } s += "\r\n"; } cout(s); file.write(s.getBytes()); } void output() { try { FileOutputStream file = new FileOutputStream(new File("result.txt")); for (cur = from; cur < to; cur++) { pic = getPic(); draw(pic, file); } file.close(); } catch (Exception e) { e.printStackTrace(); } } CharWrittenInChar() { GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment(); font = e.getAllFonts(); from = 0; to = 8; cur = 0; pic = getPic(); output(); run(); } void run() { while (true) { cout("weidiao >"); Scanner str = new Scanner(cin.nextLine()); if (!str.hasNext()) { output(); continue; } String cmd = str.next(); if (cmd.equals("help")) { cout("Character Generater---made by weidiao.neu\n"); cout("\t\tfore 前景字\n"); cout("\t\tback 背景字\n"); cout("\t\twriting 正在写\n"); cout("\t\twidth 宽度\n"); cout("\t\treset 重置全部字符及大小\n\n"); } else if (cmd.equals("reset")) { foreChar = '●'; backChar = '○'; writing = '福'; width = 40; output(); } else { if (str.hasNext()) { switch (cmd) { case "fore": foreChar = str.next().charAt(0); output(); break; case "back": backChar = str.next().charAt(0); output(); break; case "writing": writing = str.next().charAt(0); output(); break; case "width": width = new Integer(str.next()); output(); break; default: cout("illegal command\n"); } } else { cout("illegal command\n"); } } str.close(); } } void cout(String s) { System.out.print(s); } }
本程序用来"用字符写字符".给定一个字符,用很多个字符把这个字符拼起来.
原理是,把字符画在图片上(用Graphics.drawString函数),然后把这张图片画在一个固定大小的图片上.
现在,图片上只有两种颜色:前景色和背景色.
这就相当于一个二维矩阵,矩阵中有两种字符:前景字符和背景字符.
有三个东西可以进行设置:前景字符,背景字符,正在写的字符
java用字符写字符的更多相关文章
- java IO流 之 字符流
字符是我们能读懂的一些文字和符号,但在计算机中存储的却是我们看不懂的byte 字节,那这就存在关于字符编码解码的问题.所以在学习Io流的字符流前我们先了解些关于编码问题. 一.字符集与字符编码 1.什 ...
- Java:IO流之字符流Reader、Writer详解
java.io包中:字符流 字符流的两个抽象基类: Reader Writer 文件的读取:Reader抽象类(java.io包中) 直接子类的构造方法: FileRead ...
- java中字节流和字符流的区别
流分类: 1.Java的字节流 InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先.2.Java的字符流 Reader是所有读取字符串输入流的祖先,而 ...
- java把html标签字符转普通字符(反转换成html标签)(摘抄)
下面是java把html标签字符转换,我用了spring 包中的 org.springframework.web.util.HtmlUtils 了解了源代码并且进步了使用,发现写得真不错...同时也可 ...
- 【Java基础】【21IO(字符流)&字符流其他内容&递归】
21.01_IO流(字符流FileReader) 1.字符流是什么 字符流是可以直接读写字符的IO流 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写 ...
- JAVA是是如何处理字符的。
String s = "fs123fdsa";//String变量 byte b[] = s.getBytes();//String转换为byte[] String t = new ...
- 缓冲字符流 java.io.BufferedWriter ,java.io.BufferedReader,缓冲字符输出流:PrintWriter
package seday07; import java.io.IOException;import java.io.PrintWriter; /*** @author xingsir * 缓冲字符流 ...
- Java IO---字节流和字符流
一.IO流简介 流 流是一个抽象概念,Java程序和外部设备(可以是硬盘上的文件,也可以是网络设备)之间的输入输出操作是基于流的. 流就好比水管中的水流,具有流入和流出,类比数据的输入和输出. Jav ...
- Java IO: 字节和字符数组
原文链接 作者: Jakob Jenkov 译者:homesick 内容列表 从InputStream或者Reader中读入数组 从OutputStream或者Writer中写数组 在java中 ...
随机推荐
- 六、Android学习第五天——Handler的使用(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 六.Android学习第五天——Handler的使用 注意:有很多功能是不 ...
- linux 接口地址全部清除才清理从此接口发出的下一跳路由
接口地址全部清除才清理从此接口发出的下一跳路由 如: eth7配置两个地址 eth7: 192.168.1.1 10.1.1.1 添加一条路由: route add -net 2.2.2.0/24 g ...
- linux原始套接字(3)-构造IP_TCP发送与接收
一.概述 tcp报文封装在ip报文中,创建tcp的原始套接字如下: sockfd = socket ...
- System.getProperty()引起的悲剧--您的主机中的软件中止了一个已建立的连接
我已无法形容此刻我的心情.. 本来是已经写好的netty5的demo程序,server和client之间创建tcp长连接的..然后随便传点数据的简单demo..然后今天试了一下tcp粘包的例子,用到了 ...
- label与input间距的小问题
先码后文 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- Caffe fine-tuning 微调网络
转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ 目前呢,caffe,theano,torch是当下比较流行的De ...
- 第18章 图元文件_18.2 增强型图元文件(emf)(2)
18.2.7 增强型图元文件的查看和打印程序 (1)传递EMF到剪贴板,剪贴板类型应为:CF_ENHMETAFILE (2)CopyEnhMetaFile用于复制图元文件 (3)剪贴板中的图元文件会自 ...
- java io (一)
对于文件内容的操作主要分为两大类 分别是:字符流 字节流 其中,字符流有两个抽象类:Writer Reader 其对应子类FileWriter和FileReader可实现文件的读写操作 Buffe ...
- [No000029]程序员的那些事儿 -- 皆大欢喜的加薪
我的朋友A君是个典型的.NET开发人员,技术不错,人品也不错,在一家小公司(姑且称为甲公司)做项目开发,是技术骨干. 3个月前,他找到我说想跳槽,让我帮忙介绍工作.我说为什么想跳了? 1. 为什么想离 ...
- 第六课——UIDynamicAnimator
今天我们要学习UIDynamicAnimator 仿真物理学 . UIKit 力学(Dynamics) 和动态效果(Motion Effects) . 创建力学基本流程: 创建运动管理 创建运动行为( ...