學習JAVA語言不到三個月,可能我比較蠢,一直沒有進步。
對於字符輸出到文件,通過參考資料和自己嘗試,我是基本掌握了;
但對於圖像輸出到文件,我還是頭一次接觸,不知從何入手,特此向諸位請教。具體來講,我想寫一個能實現如下基本功能的代碼:
字符:「字」;
字體:細明體;
字形:粗體;
大小:20;
顏色:白色;
圖片格式:BMP/JPG/PNG/GIF(其中之一);
圖片寬度:40;
圖片高度:40;
圖片底色:黑色;
字符在圖片位置為居中;
輸出的圖片是一個完整的文件(可讀寫),也就是說可以用相關的工具來查看和輯,而非以Applet的形式顯示。請精於此類編程的朋友指點,或提供實現此類功能的相關代碼以作參考,謝謝!

解决方案 »

  1.   

    写一个给你,写得不怎么样,呵呵,基本达到要求吧。
    package io;import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;import com.sun.image.codec.jpeg.ImageFormatException;
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;/**
     * 构造图片输出
     */
    public class TextImage {
    public static void main(String[] args) {
    String text = "字";// 要输出的文本
    try {
    //检查文件夹
    File d = new File("d:\\image");
    if (!d.exists()) {
    d.mkdir();// 如果文件夹不存在,就构造一个
    }
    //  构造文件流
    BufferedOutputStream bos = new BufferedOutputStream(
    new FileOutputStream("d:\\image"+File.separator+"img.jpg")); int width = 40;//图片宽
    int height = 40;//高
    BufferedImage image = new BufferedImage(width, height,
    BufferedImage.TYPE_INT_RGB);//构造图片缓冲区
    Graphics g = image.getGraphics();//获取画板
    //设置字体
    g.setFont(new Font("宋体",Font.BOLD,12));
    //设置画笔颜色为黑色
    g.setColor(Color.black);
    //绘制背景
    g.fillRect(0, 0, width, height);
    //设置画笔颜色为白色
    g.setColor(Color.white);
    //绘制文本
    g.drawString(text, width / 2 - (text.length()*6), height / 2+6);
    //释放此图形的上下文并释放它所使用的所有系统资源。
    g.dispose();
    // 在输出流中创建一个jpeg编码器
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
    // 将图片编码成一个jpeg数据流
    encoder.encode(image);
    // 关闭前输出一张图片
    bos.close(); } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (ImageFormatException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } }
    }
      

  2.   

    首先...
    感謝yjgoo199先生給出的代碼...但是...
    請問先生的代碼可運行於哪個JDK環境...
    我以先生之代碼進行編碼時提示出錯...更請先生能否給予細詳的說明...
    包括所調用的包,方法,語法上的具體說明...
    我對圖像生成與文件輸出這方面真的是從零開始的...
    因此...
    如先生方便的話...還請先生細說...
    我真的很需要好好地學習這方面的知識...謝謝...
      

  3.   

    不知道您报什么错误。我使用的是jdk5
    编译和执行很顺利。
    使用的包和类都是jdk中自带的。
    帮助文档中都有帮助。
    import com.sun.image.codec.jpeg.ImageFormatException;
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;
    这几个类帮助中没有。注释中对使用到的方法也基本解释了。
    如有深入学习的需要,绘图的部分基本上就是Graphics类了。看看帮助即可。
    如果编译还出错,请把异常信息发出来。我看看,呵呵。
      

  4.   

    yjgoo199先生...
    余萬分抱歉...緣工作較忙...
    幾忘予先生結帳...
    亦無時能細習先生之代碼...
    實感無奈...
    余甚愧已...
    望先生諒...再提幾問...
    即圖像輸出格式之問...
    何以輸出BMP格式?
    何以輸出PNG格式?
    何以輸出WBMP格式?
    何以輸出GIF格式?
    希能予余解答...尚時...余得查無果...
    又以網上之訊息無多...
    然得知一鑒...乃PCX格式之編碼及反編碼資料...
    實為偽代碼之形式...余惑之...請先生指教...
    資料請鏈接此頁...
    http://www.informit.com/articles/article.aspx?p=684049&f1=rss&rl=1余之最終目的實乃輸出PCX格式文檔矣...
    其間雖可以第三方軟體轉換之...
    然以上萬數之文檔得以轉換...實為杯水車薪...
    呼...先生能助之...
    再以分40為謝...
      

  5.   

    分数倒无所谓,主要是大家一起学习下。
    输出成BMP格式可以使用ImageIO类。
    PCX这种图片格式太老了,还没找到已经实现的转换方法,自己写的话得了解各种图片的格式。比较困难。
    我也很少有机会做这方面的,所以可能很难帮助到您。
    尽量帮你看看吧。