`
wuce7758
  • 浏览: 182211 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
  • YTT1121: 有网络拓扑发现的源代码么?能不能发我一份学习一下,现在我正要做 ...
    java拓扑图
  • YTT1121: 大神,有网络拓扑发现的源代码么?或者您会编写么?我需要做科研改 ...
    java拓扑图
  • YTT1121: 大神,有网络拓扑发现的源代码么?或者您会编写么?我需要做科研改 ...
    java拓扑图
  • poettang: 求代码分享学习,谢谢!膜拜大神!258026921@qq.co ...
    java拓扑图
  • oiqio: 87836238@qq.com,感谢楼主,来一份~
    java拓扑图

文本放大器

阅读更多

/**
 * @(#)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 平台上字体高度不能选的太大, 否则会出现失真现象."
 );
  }
}

分享到:
评论

相关推荐

    jquery实现的冒泡放大器

    **jQuery实现的冒泡放大器详解** 在网页交互设计中,动态效果往往能提升用户体验,其中,冒泡放大器是一种常见的动态效果,它通常用于吸引用户的注意力或突出显示某些元素。本篇将深入探讨如何使用jQuery来实现这种...

    运算放大器权威指南(第3版)

    运算放大器的类型也非常多样,包括通用型运算放大器、高速运算放大器、低噪声运算放大器、低功耗运算放大器、高精度运算放大器等,不同的应用场景需要选用不同特性的运算放大器。 在设计使用运算放大器时,需要考虑...

    基于运算放大器和模拟集成电路的电路设计(第3版)

    《基于运算放大器和模拟集成电路的电路设计(第3版)》作为业内公认的模拟电路设计的经典教材,涵盖了模拟电子学中的核心组件——运算放大器,及其在模拟集成电路中的应用。以下是该书所涉及的核心知识点: 1. 运算...

    功率放大器ADS仿真所需MRF8P9040模型

    1. MRF8P9040N的ADS模型文件:这是一个特殊的文本文件,包含了ADS可以识别的参数和公式,用于在仿真中代表实际的功率放大器。 2. 设计示例:可能包含了一些已经配置好的ADS项目,展示了如何使用MRF8P9040模型进行...

    运算放大器电路知识以及其他辅助设计软件

    运算放大器(OpAmp)是电子工程领域中不可或缺的一部分,广泛应用于信号处理、滤波、放大等众多领域。在设计运算放大器电路时,精确的计算和细致的参数选择至关重要,这往往需要设计师具备深厚的理论知识和丰富的...

    Tanner环境下误差放大器的性能仿真

    ### Tanner环境下误差放大器的性能仿真 #### 一、引言 在电子设计自动化(EDA)领域,Tanner工具因其强大的模拟与数字集成电路设计能力而备受青睐。本文将重点介绍在Tanner环境下对误差放大器进行性能仿真的过程,...

    《运算放大器权威指南 第三版》 包含全部章节

    以上就是针对“运算放大器”这一主题的知识点介绍,由于未提供《运算放大器权威指南 第三版》的具体内容,以上内容是基于运算放大器的普遍知识进行扩展的,希望能够对您了解运算放大器有所帮助。

    modian.rar_放大器_放大器模型_运算放大器

    **运算放大器基础** 运算放大器,简称运放,是一种重要的模拟集成电路,广泛应用于各种电子设备中,如信号处理、滤波、放大、比较等。标题中的“modian.rar”可能是一个包含有关运放深入讲解的资料包,而“放大器...

    甲乙类放大器[protel] 源文件]

    在电子工程领域,甲乙类放大器是一种广泛使用的模拟电路设计,主要应用于音频功率放大器。此主题涉及的“甲乙类放大器[Protel源文件]”是关于使用Protel软件进行电路设计的资源包,它包含了电路图、电路板布局、网表...

    PyQt使用QTextEdit实现文本编辑器功能,具有文本编辑器GUI界面

    本教程将深入探讨如何使用PyQt中的QTextEdit组件来实现一个具备多种功能的文本编辑器,包括保存、另存、打印、新建、打开、退出保存、查找、撤销、删除、复制、全选、自动换行、改变字体、放大、缩小等功能。...

    MITSUBISHI MR-C伺服系统伺服放大器外形图.pdf

    由于无法直接使用扫描文本,我们需要依据标题和描述中的信息,对MITSUBISHI MR-C伺服系统伺服放大器外形图进行知识整理。 在展开知识整理之前,我们可以先了解一下伺服放大器的基本工作原理。伺服放大器接收来自...

    sss.rar_放大器

    标题中的“sss.rar_放大器”表明这是一个与信号放大器相关的压缩文件,而“sss.txt”是其中包含的文本文件。描述中重复提到了“数据结构”和“信号放大器”,这暗示了内容可能涉及这两方面的知识。标签“放大器”...

    ZoomIt 屏幕笔 放大器

    很好用的屏幕笔放大器,可以放大、划线、选择、输入文本等,非常适合于授课、演讲等演示操作。

    Qt制作的屏幕放大器

    在这个项目中,“Qt制作的屏幕放大器”利用了Qt库的能力,创建了一个能够放大屏幕上显示内容的实用工具,特别适用于需要细看文本或者图像细节的场景,如编程、设计工作或学习。 屏幕放大器的核心功能是捕获屏幕图像...

    具有方案对比的音响放大器的设计

    音响放大器设计涉及多个关键环节,包括话筒扩音、音调控制、音量控制、电子混响和卡拉OK伴唱功能。为了实现这些功能,设计师需要考虑一系列的技术指标和电路设计。 首先,音响放大器的主要技术指标是额定功率Po,...

    一种低电压高增益运算放大器.pdf

    3. 高增益放大器的设计:对于高增益放大器的设计要求和实现方法,例如使用多级放大器串联来增加放大倍数,以及在放大过程中保持信号质量。 4. 电路仿真与测试:利用LabVIEW软件对运算放大器进行设计验证和性能测试的...

    android 文本阅读器源代码

    在Android平台上,文本阅读器是一种常见的应用,它允许用户阅读电子书、文档或者任何纯文本内容。本项目名为“PandaReaderLight”,很显然,它是一个轻量级的Android文本阅读器应用程序。从源代码的角度来分析,我们...

    结构体数字锁相放大器源码

    数字锁相放大器(Digital Phase-Locked Loop,简称DPLL)是一种在数字信号处理中用于同步和频率/相位控制的电路。它结合了数字滤波器、分频器、相位比较器和压控振荡器(VCO)的功能,以实现精确的频率和相位跟踪。...

    放大器:您的终端的完整文本编辑器

    "放大器:您的终端的完整文本编辑器"是一款专为终端用户设计的高效文本编辑器,它结合了Vim的强大功能和Rust编程语言的安全性与速度。在深入探讨这款编辑器之前,让我们先理解一些基本概念。 1. **Vim**:Vim(Vi ...

Global site tag (gtag.js) - Google Analytics