标签:
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 = font.length; 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函数),然后把这张图片画在一个固定大小的图片上.
现在,图片上只有两种颜色:前景色和背景色.
这就相当于一个二维矩阵,矩阵中有两种字符:前景字符和背景字符.
有三个东西可以进行设置:前景字符,背景字符,正在写的字符
标签:
原文地址:http://www.cnblogs.com/weidiao/p/5110006.html