- 浏览: 182243 次
- 性别:
- 来自: 北京
文章分类
最新评论
/**
* @(#)Text2Image.java 1.0 December 2002
*
* Copyright 2002 BeanSoft. All rights reserved.
*
* This software is the proprietary information of BeanSoft.
* Use is subject to license terms.
*
*
* Text2Image 可轻松将您输入的汉字,英文转换成由字符组成的特殊字体.
* 可将转换后的文字用于QQ,ICQ,MSN及邮件中.
*/
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.datatransfer.*;
public class Text2Image extends Frame implements ActionListener
{
int width = 10, height = 10;
ByteArrayOutputStream out = new ByteArrayOutputStream();
String symbol;
FileDialog fileDialog;
Thread convertThread = null;
public boolean isStandardAlone = true;
TextArea textArea = new TextArea();
Panel panelInput = new Panel();
TextField fieldInput = new TextField(20);
Choice choiceSymbol = new Choice();
Label labelInputHint = new Label();
Label labelCharHint = new Label();
Panel panelButtons = new Panel();
Button buttonSave = new Button();
Button buttonCopy = new Button();
Button buttonConvert = new Button();
Button buttonAbout = new Button();
Button buttonHelp = new Button();
Label labelFontHint = new Label();
TextField fieldFontName = new TextField();
Label labelHeightHint = new Label();
TextField fieldHeight = new TextField();
Button buttonExit = new Button();
GridLayout gridLayoutInputPanel = new GridLayout();// Target character choice
public Text2Image()
{
// Set event handlers
this.addWindowListener (new WindowAdapter(){
public void windowClosing(WindowEvent e){
buttonExit_actionPerformed(null);
}
});
this.setIconImage(Toolkit.getDefaultToolkit().getImage("icon.jpg"));
fieldInput.addActionListener(this);
fieldFontName.addActionListener(this);
fieldHeight.addActionListener(this);
buttonConvert.addActionListener(this);
try {
buildSymbolChoice();
jbInit();
} catch(Exception e) {
e.printStackTrace();
}
this.setSize(800, 500);
this.show();
}
public void actionPerformed(ActionEvent e) {
if(convertThread == null) {
convertThread = new Thread() {
public void run() {
convert();
}
};
convertThread.start();
}
}
void buildSymbolChoice() {
choiceSymbol.addItem("■");
choiceSymbol.addItem("★");
choiceSymbol.addItem("□");
choiceSymbol.addItem("☆");
choiceSymbol.addItem("◇");
choiceSymbol.addItem("▲");
choiceSymbol.addItem("△");
choiceSymbol.addItem("▼");
choiceSymbol.addItem("▽");
choiceSymbol.addItem("◎");
choiceSymbol.addItem("·");
choiceSymbol.addItem("∞");
choiceSymbol.addItem("∷");
choiceSymbol.addItem("╳");
choiceSymbol.addItem("√");
choiceSymbol.addItem("¥");
}
void convert() {
try {
buttonConvert.setEnabled(false);
textArea.setText("正在转换中,请稍候...");
out.reset();
Image image = createImage(width, height);// This is a temparary image
String s = fieldInput.getText();
String fontName = fieldFontName.getText();
symbol = choiceSymbol.getSelectedItem();
if(s.equals("")) throw new Exception("对不起,转换之前请首先输入要转换的字符!");
if(fontName.equals("")) throw new Exception("对不起,转换之前请首先输入一个字体名!");
height = Integer.parseInt(fieldHeight.getText());
Font f = new Font(fontName, Font.PLAIN, height);
Graphics g = image.getGraphics();
g.setFont(f);
FontMetrics fm = g.getFontMetrics();
width = fm.stringWidth(s);
height = fm.getHeight();
image = createImage(width, height);// This is the really image to draw string
g = image.getGraphics();
g.setFont(f);
g.drawString(s, 0, fm.getAscent());
handlePixels(image, 0, 0, width, height);
textArea.setText(getCleanedEmptyLineOutput());
} catch(Exception ex) {
if(ex instanceof NumberFormatException)
textArea.setText("错误: 请您输入有效的字体高度.");
else textArea.setText("错误: " + ex.getMessage());
}
buttonConvert.setEnabled(true);
convertThread = null;
}
String getCleanedEmptyLineOutput() {
byte[] bits = out.toByteArray();
String result = "";
try {
BufferedReader in = new BufferedReader(new InputStreamReader(
new ByteArrayInputStream(bits)));
String line;
while((line = in.readLine()) != null) {
if(line.indexOf(symbol) != -1)// Decide if a emtpy line
result += line + "\r\n";
}
in.close();
}catch(Exception ex){
}
return result;
}
public void handlesinglepixel(int x, int y, int pixel) {
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel ) & 0xff;
// Deal with the pixel as necessary...
String s = ((red + green + blue) == 0)? symbol:" ";// 2 spaces
try {
out.write(s.getBytes());
if(x == width - 1) {
out.write("\r\n".getBytes());
}
}catch(Exception ex){}
}
public void handlePixels(Image img, int x, int y, int w, int h) {
int[] pixels = new int[w * h];
PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);
try {
pg.grabPixels();
} catch (InterruptedException e) {
System.err.println("interrupted waiting for pixels!");
return;
}
if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
System.err.println("image fetch aborted or errored");
return;
}
for (int j = 0; j < h; j++) {
for (int i = 0; i < w; i++) {
handlesinglepixel(x+i, y+j, pixels[j * w + i]);
}
}
}
// Menu Save As...
void saveAs() {
fileDialog = new FileDialog(this, "");
fileDialog.setMode(FileDialog.SAVE);
fileDialog.setTitle("另存为");
fileDialog.show();
String fileName = fileDialog.getFile();
if(fileName == null) return;
else saveFile(fileDialog.getDirectory() + fileName);
}
// Save the text to the file
void saveFile(String filePath) {
if(filePath == null || filePath.equals("")) return;
String s = new String(out.toByteArray());
try
{
FileWriter out = new FileWriter(filePath);
out.write(s);
out.close();
}
catch(Exception e)
{
textArea.append("无法保存文件" + filePath + ".原因:" + e + "\n");
}
s = null;
}
private void jbInit() throws Exception {
this.setTitle("Text2Image 1.0 字符文本图片转换器 - 作者:刘长炯");
labelInputHint.setText("请输入要转换的字符[个数不限]:");
fieldInput.setColumns(20);
fieldInput.setText("通信工程");
labelCharHint.setText("请选择显示的符号:");
buttonSave.setLabel("保存");
buttonSave.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonSave_actionPerformed(e);
}
});
buttonCopy.setLabel("复制");
buttonCopy.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonCopy_actionPerformed(e);
}
});
buttonConvert.setLabel("转换");
buttonAbout.setLabel("关于");
buttonAbout.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonAbout_actionPerformed(e);
}
});
buttonHelp.setLabel("帮助");
buttonHelp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonHelp_actionPerformed(e);
}
});
labelFontHint.setText("请输入字体名[某些字体名系统可能不支持]:");
fieldFontName.setColumns(4);
fieldFontName.setText("宋体");
labelHeightHint.setText("输出字体高度[点数]:");
fieldHeight.setColumns(2);
fieldHeight.setText("18");
buttonExit.setLabel("退出");
buttonExit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonExit_actionPerformed(e);
}
});
panelInput.setLayout(gridLayoutInputPanel);
gridLayoutInputPanel.setColumns(2);
gridLayoutInputPanel.setRows(0);
gridLayoutInputPanel.setHgap(10);
gridLayoutInputPanel.setVgap(5);
panelInput.setBackground(new Color(192, 192, 255));
panelButtons.setBackground(new Color(255, 200, 100));
textArea.setForeground(Color.green);
textArea.setBackground(Color.black);
this.add(textArea, BorderLayout.CENTER);
this.add(panelInput, BorderLayout.NORTH);
panelInput.add(labelInputHint, null);
panelInput.add(fieldInput, null);
panelInput.add(labelCharHint, null);
panelInput.add(choiceSymbol, null);
panelInput.add(labelFontHint, null);
panelInput.add(fieldFontName, null);
panelInput.add(labelHeightHint, null);
panelInput.add(fieldHeight, null);
this.add(panelButtons, BorderLayout.SOUTH);
panelButtons.add(buttonSave, null);
panelButtons.add(buttonCopy, null);
panelButtons.add(buttonConvert, null);
panelButtons.add(buttonAbout, null);
panelButtons.add(buttonHelp, null);
panelButtons.add(buttonExit, null);
}
void buttonExit_actionPerformed(ActionEvent e) {
this.dispose();
if(isStandardAlone)
System.exit(0);
}
void buttonCopy_actionPerformed(ActionEvent e) {
copy(textArea.getText());
}
// Copy selected text to clipboard
private void copy(String s) {
Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
if ( s == null || s.equals("") ) return;
try {
clip.setContents( new StringSelection(s), null);
}catch(Exception e) {
}
}
public static void main(String args[])
{
new Text2Image();
}
void buttonSave_actionPerformed(ActionEvent e) {
saveAs();
}
void buttonAbout_actionPerformed(ActionEvent e) {
textArea.setText("Text2Image 1.0 字符文本图片转换器\n"
+ "可轻松将您输入的汉字,英文转换成由字符组成的特殊字体.\n"
+ "可将转换后的文字用于QQ,ICQ,MSN及邮件中.\n"
+ "版本: 1.0; 免费软件; 作者:刘长炯; 日期: 2002年12月\n"
+ "本程序用 Java 语言编写, 可运行于任何支持 Java 的 OS 上.\n"
+ "Copyright (c) 2002 通信工程学院 刘长炯. All rights reserved.\n"
);
}
void buttonHelp_actionPerformed(ActionEvent e) {
textArea.setText(
"输入要转换的字符串, 选择显示的符号, 输入字体名, 指定字体高度,\n" +
"最后按下\"转换\"按钮, 或者在上面的三个输入区域按下\"Enter\"键就开始转换了.\n" +
"如果输入的字符较多,或者字体太高, 可能需要多等一会儿.\n" +
"保存: 将当前转换结果保存到文件中." +
"复制: 将转换结果复制到剪贴板上." +
"\n\n" +
"我们强烈建议您使用 Java 2 平台来运行这个程序, 这样您就可以选择更多的字体效果.\n" +
"在低版本的 Java 平台上字体高度不能选的太大, 否则会出现失真现象."
);
}
}
发表评论
-
人民币转换数字
2012-11-07 15:14 1124该贴原因: ... -
个人收集的java精品网站
2012-05-30 08:19 0java进阶网 http://www.javady.com ... -
JVM(java 虚拟机)内存设置
2011-06-02 16:37 15192JVM(java 虚拟机)内存 ... -
汉字全半角转化程序
2011-02-25 08:52 1482转载一个牛人的。方便以后查看使用: 也许. 这个代码对很多人 ... -
md5JAVA实现
2010-06-07 22:43 1205MD5算法研究 MD5的 ... -
在Java中操作串口实现短信收发2
2010-06-07 22:08 14094.发送数据成功进行初 ... -
在Java中操作串口实现短信收发1
2010-06-07 22:06 1608在Java中操作串口实现短信收发 采用串口操作进行短信收发 ... -
JVM内存参数调优
2010-06-07 22:03 1978JVM内存参数调优 我们前面所提到的堆内存(heap)是由 ... -
多线程程序设计的要点
2010-06-07 22:00 861多线程中有主内存和工 ... -
Java 处理事务精要
2010-06-07 21:58 996简单事务的概念 我 ... -
如何开公司及手续过程
2010-06-07 21:55 1219注册一个公司,首先想好经营什么,怎样经营好,再来注册。要不,注 ... -
运用加密技术保护Java源代码
2010-06-07 21:52 950Java程序的源代码很容易被别人偷看,只要有一个反编译器,任何 ... -
连接池的基本工作原理
2010-06-07 21:39 848连接池的基本工作原理 1、基本概念及原理 由上面的分析可以 ... -
高效的Java音乐播放类
2010-06-07 21:34 1537/** *//** * 自动播放,循环停止后结束。 ... -
高效的Java音乐播放类 2
2010-06-07 21:32 1200/** *//** * 直接播放url文件 * ... -
高效的Java音乐播放类
2010-06-07 21:26 1376Java音频播放,因为必须依赖到本地环境,所以JAVA在音频处 ... -
用开源的 InnoSetup 为 Java 应用制作 Windows 安装程序
2010-04-24 11:30 1684在这个例子里, 我将给大家展示如何使用 InnoSetup 自 ... -
Swing: 用 GlassPane 显示一个透明的正在操作框
2010-04-24 10:25 2033这个组件可以让用户看到界面里的显示但是无法操作. 需要的图: ... -
在自定义 JToolTip 里面显示组件
2010-04-24 10:03 2326在自定义 JToolTip 里面显示组件 我们经常可以看 ... -
JIDE的开源Swing组件
2010-04-24 09:57 9605虽然它们早就开源了(去年吧),我也是今天才看到,虽然目前也用不 ...
相关推荐
**jQuery实现的冒泡放大器详解** 在网页交互设计中,动态效果往往能提升用户体验,其中,冒泡放大器是一种常见的动态效果,它通常用于吸引用户的注意力或突出显示某些元素。本篇将深入探讨如何使用jQuery来实现这种...
运算放大器的类型也非常多样,包括通用型运算放大器、高速运算放大器、低噪声运算放大器、低功耗运算放大器、高精度运算放大器等,不同的应用场景需要选用不同特性的运算放大器。 在设计使用运算放大器时,需要考虑...
《基于运算放大器和模拟集成电路的电路设计(第3版)》作为业内公认的模拟电路设计的经典教材,涵盖了模拟电子学中的核心组件——运算放大器,及其在模拟集成电路中的应用。以下是该书所涉及的核心知识点: 1. 运算...
1. MRF8P9040N的ADS模型文件:这是一个特殊的文本文件,包含了ADS可以识别的参数和公式,用于在仿真中代表实际的功率放大器。 2. 设计示例:可能包含了一些已经配置好的ADS项目,展示了如何使用MRF8P9040模型进行...
运算放大器(OpAmp)是电子工程领域中不可或缺的一部分,广泛应用于信号处理、滤波、放大等众多领域。在设计运算放大器电路时,精确的计算和细致的参数选择至关重要,这往往需要设计师具备深厚的理论知识和丰富的...
### Tanner环境下误差放大器的性能仿真 #### 一、引言 在电子设计自动化(EDA)领域,Tanner工具因其强大的模拟与数字集成电路设计能力而备受青睐。本文将重点介绍在Tanner环境下对误差放大器进行性能仿真的过程,...
以上就是针对“运算放大器”这一主题的知识点介绍,由于未提供《运算放大器权威指南 第三版》的具体内容,以上内容是基于运算放大器的普遍知识进行扩展的,希望能够对您了解运算放大器有所帮助。
**运算放大器基础** 运算放大器,简称运放,是一种重要的模拟集成电路,广泛应用于各种电子设备中,如信号处理、滤波、放大、比较等。标题中的“modian.rar”可能是一个包含有关运放深入讲解的资料包,而“放大器...
在电子工程领域,甲乙类放大器是一种广泛使用的模拟电路设计,主要应用于音频功率放大器。此主题涉及的“甲乙类放大器[Protel源文件]”是关于使用Protel软件进行电路设计的资源包,它包含了电路图、电路板布局、网表...
本教程将深入探讨如何使用PyQt中的QTextEdit组件来实现一个具备多种功能的文本编辑器,包括保存、另存、打印、新建、打开、退出保存、查找、撤销、删除、复制、全选、自动换行、改变字体、放大、缩小等功能。...
由于无法直接使用扫描文本,我们需要依据标题和描述中的信息,对MITSUBISHI MR-C伺服系统伺服放大器外形图进行知识整理。 在展开知识整理之前,我们可以先了解一下伺服放大器的基本工作原理。伺服放大器接收来自...
标题中的“sss.rar_放大器”表明这是一个与信号放大器相关的压缩文件,而“sss.txt”是其中包含的文本文件。描述中重复提到了“数据结构”和“信号放大器”,这暗示了内容可能涉及这两方面的知识。标签“放大器”...
很好用的屏幕笔放大器,可以放大、划线、选择、输入文本等,非常适合于授课、演讲等演示操作。
在这个项目中,“Qt制作的屏幕放大器”利用了Qt库的能力,创建了一个能够放大屏幕上显示内容的实用工具,特别适用于需要细看文本或者图像细节的场景,如编程、设计工作或学习。 屏幕放大器的核心功能是捕获屏幕图像...
音响放大器设计涉及多个关键环节,包括话筒扩音、音调控制、音量控制、电子混响和卡拉OK伴唱功能。为了实现这些功能,设计师需要考虑一系列的技术指标和电路设计。 首先,音响放大器的主要技术指标是额定功率Po,...
3. 高增益放大器的设计:对于高增益放大器的设计要求和实现方法,例如使用多级放大器串联来增加放大倍数,以及在放大过程中保持信号质量。 4. 电路仿真与测试:利用LabVIEW软件对运算放大器进行设计验证和性能测试的...
在Android平台上,文本阅读器是一种常见的应用,它允许用户阅读电子书、文档或者任何纯文本内容。本项目名为“PandaReaderLight”,很显然,它是一个轻量级的Android文本阅读器应用程序。从源代码的角度来分析,我们...
数字锁相放大器(Digital Phase-Locked Loop,简称DPLL)是一种在数字信号处理中用于同步和频率/相位控制的电路。它结合了数字滤波器、分频器、相位比较器和压控振荡器(VCO)的功能,以实现精确的频率和相位跟踪。...
"放大器:您的终端的完整文本编辑器"是一款专为终端用户设计的高效文本编辑器,它结合了Vim的强大功能和Rust编程语言的安全性与速度。在深入探讨这款编辑器之前,让我们先理解一些基本概念。 1. **Vim**:Vim(Vi ...