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中 ...
随机推荐
- linux创建用户、设置密码、修改用户、删除用户
创建用户.设置密码.修改用户.删除用户:useradd testuser 创建用户testuserpasswd testuser 给已创建的用户testuser设置密码说明:新创建的用户会在/home ...
- 使用redis进行消息推送
Redis支持这样一种特性,你可以将数据推到某个信息管道中,然后其它客户端可以通过订阅这些管道来获取推送过来的信息.使用Redis的Pub/Sub,接收方在某个channel注册为一个订阅者,然后监听 ...
- MySQL Database on Azure 参数设置
在使用MySQL过程中,经常会根据需要对MySQL的参数进行一些设置和调整.作为PaaS版本的MySQL,MySQL Database on Azure在参数设置方面有一些限制,客户不能像使用on-p ...
- 【2016-10-13】【坚持学习】【Day4】【模板方法模式】
今天学习模板方法模式 例子代码; 模板抽象类,定义了一套流程,有一些方法已经实现,有一些抽象方法需要继承它的子类实现 abstract class DataViewer { //抽象方法:获取数据 p ...
- 怎么解决ZBrush保存历史记录太多问题
经常有用户反映说ZBrush ®保存历史记录太多了,导致文件太大了!模型已经是降低级别保存了,在保存历史记录的时候还是很慢很慢,不知道怎么才能减少ZBrush保存的历史步骤的多少.针对这一问题,小编统 ...
- jquery添加光棒效果的各种方式以及简单动画复杂动画
过滤器.绑定事件.动画 一.基本过滤器 语法 描述 返回值 :first 选取第一个元素 单个元素 :last 选取最后一个元素 单个元素 :not(selector) 选取去除所有与给定选择器匹 ...
- 学习ROS的基本知识,节点、话题、服务等
之前我在电脑上安装的ROS版本为jade版的. 可是后来发现各个教程安装的是indigo版的 于是我又去看了看ROS官网,在官网上有这样的一句话. 而且又因为indigo版的资料多一些,于是我就换了r ...
- [No00005F]读书与心智
读千卷书,行万里路,不够…还得有个对谈者相伴,才更有意思.十月七号晚上,与友人谈读书,线上直播,三百观众相伴,四小时畅谈,不亦乐乎! Part1:读书的载体 散发出最浓郁的知识芬芳和铭刻下最隽永的历史 ...
- [No000055]教你早晨清肠、除口臭、色斑、大肚腩
[长生不老的秘诀] 释.道.医三家有个共同的秘诀:"要叫人不死. 肠中须无屎". 佛家除要求人们戒杀吃素外,还认为早饭是天食,中饭是人食,晚饭是鬼食. 因此,为了身体健康,不妨碍修 ...
- Maya 与 Matlab 数据互联插件使用教程
实验室做网格处理方面的算法,写界面很麻烦,所以有了利用maya和matlab进行数据连通的念头,于是有了这个插件. 这个插件可以把maya的网格数据导入matlab之中,完成计算之后重新返回maya. ...