java的字符_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 = 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);

}

}

EAAAAASUVORK5CYII=

D+FzysVNV5WGAAAAABJRU5ErkJggg==

5JZarVAAAAAElFTkSuQmCC

本程序用来"用字符写字符".给定一个字符,用很多个字符把这个字符拼起来.

原理是,把字符画在图片上(用Graphics.drawString函数),然后把这张图片画在一个固定大小的图片上.

现在,图片上只有两种颜色:前景色和背景色.

这就相当于一个二维矩阵,矩阵中有两种字符:前景字符和背景字符.

有三个东西可以进行设置:前景字符,背景字符,正在写的字符

标签:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值