如题,谁知道请告诉我~!感谢~

解决方案 »

  1.   

    要显示的话,先用这张图构造一个Image对象,然后再调用Graphics的方法可以画出来了
      

  2.   

    这里是一个保存位图的java代码
    你可以学习一下import java.awt.*;
    import java.io.*;
    import java.awt.image.*;
    public class BMPFile extends Component {
    file://--- 私有常量
    private final static int BITMAPFILEHEADER_SIZE = 14;
    private final static int BITMAPINFOHEADER_SIZE = 40;
    file://--- 私有变量声明
    file://--- 位图文件标头
    private byte bitmapFileHeader [] = new byte [14];
    private byte bfType [] = {'B', 'M'};
    private int bfSize = 0;
    private int bfReserved1 = 0;
    private int bfReserved2 = 0;
    private int bfOffBits = BITMAPFILEHEADER_SIZE + BITMAPINFOHEADER_SIZE;file://--- 位图信息标头
    private byte bitmapInfoHeader [] = new byte [40];
    private int biSize = BITMAPINFOHEADER_SIZE;
    private int biWidth = 0;
    private int biHeight = 0;
    private int biPlanes = 1;
    private int biBitCount = 24;
    private int biCompression = 0;
    private int biSizeImage = 0x030000;
    private int biXPelsPerMeter = 0x0;
    private int biYPelsPerMeter = 0x0;
    private int biClrUsed = 0;
    private int biClrImportant = 0;file://--- 位图原始数据
    private int bitmap [];file://--- 文件部分
    private FileOutputStream fo;file://--- 缺省构造函数
    public BMPFile() {}public void saveBitmap (String parFilename, Image parImage, int
    parWidth, int parHeight) {
    try {
    fo = new FileOutputStream (parFilename);
    save (parImage, parWidth, parHeight);
    fo.close (); 
    }
    catch (Exception saveEx) {
    saveEx.printStackTrace ();
    }}
    /*
    * saveMethod 是该进程的主方法。该方法
    * 将调用 convertImage 方法以将内存图像转换为
    * 字节数组;writeBitmapFileHeader 方法创建并写入
    * 位图文件标头;writeBitmapInfoHeader 创建 
    * 信息标头;writeBitmap 写入图像。
    *
    */
    private void save (Image parImage, int parWidth, int parHeight) {try {
    convertImage (parImage, parWidth, parHeight);
    writeBitmapFileHeader ();
    writeBitmapInfoHeader ();
    writeBitmap ();
    }
    catch (Exception saveEx) {
    saveEx.printStackTrace ();
    }
    }
    /*
    * convertImage 将内存图像转换为位图格式 (BRG)。
    * 它还计算位图信息标头所用的某些信息。
    *
    */
    private boolean convertImage (Image parImage, int parWidth, int parHeight) {
    int pad;
    bitmap = new int [parWidth * parHeight];
    PixelGrabber pg = new PixelGrabber (parImage, 0, 0, parWidth, parHeight,
    bitmap, 0, parWidth);
    try {
    pg.grabPixels ();
    }
    catch (InterruptedException e) {
    e.printStackTrace ();
    return (false);
    }pad = (4 - ((parWidth * 3) % 4)) * parHeight;
    biSizeImage = ((parWidth * parHeight) * 3) + pad;
    bfSize = biSizeImage + BITMAPFILEHEADER_SIZE +
    BITMAPINFOHEADER_SIZE;
    biWidth = parWidth;
    biHeight = parHeight;return (true);
    }/*
    * writeBitmap 将象素捕获器返回的图像转换为
    * 所需的格式。请记住:扫描行在位图文件中是
    * 反向存储的!
    *
    * 每个扫描行必须补足为 4 个字节。
    */
    private void writeBitmap () {int size;
    int value;
    int j;
    int i;
    int rowCount;
    int rowIndex;
    int lastRowIndex;
    int pad;
    int padCount;
    byte rgb [] = new byte [3];
    size = (biWidth * biHeight) - 1;
    pad = 4 - ((biWidth * 3) % 4);
    if (pad == 4) // <==== 错误修正
    pad = 0; // <==== 错误修正
    rowCount = 1;
    padCount = 0;
    rowIndex = size - biWidth;
    lastRowIndex = rowIndex;try {
    for (j = 0; j < size; j++) {
    value = bitmap [rowIndex];
    rgb [0] = (byte) (value & 0xFF);
    rgb [1] = (byte) ((value >> 8) & 0xFF);
    rgb [2] = (byte) ((value >> 16) & 0xFF);
    fo.write (rgb);
    if (rowCount == biWidth) {
    padCount += pad;
    for (i = 1; i <= pad; i++) {
    fo.write (0x00);
    }
    rowCount = 1;
    rowIndex = lastRowIndex - biWidth;
    lastRowIndex = rowIndex;
    }
    else
    rowCount++;
    rowIndex++;
    }file://--- 更新文件大小
    bfSize += padCount - pad;
    biSizeImage += padCount - pad;
    }
    catch (Exception wb) {
    wb.printStackTrace ();
    }} /*
    * writeBitmapFileHeader 将位图文件标头写入文件中。
    *
    */
    private void writeBitmapFileHeader () {try {
    fo.write (bfType);
    fo.write (intToDWord (bfSize));
    fo.write (intToWord (bfReserved1));
    fo.write (intToWord (bfReserved2));
    fo.write (intToDWord (bfOffBits));}
    catch (Exception wbfh) {
    wbfh.printStackTrace ();
    }}/*
    *
    * writeBitmapInfoHeader 将位图信息标头
    * 写入文件中。
    *
    */private void writeBitmapInfoHeader () {try {
    fo.write (intToDWord (biSize));
    fo.write (intToDWord (biWidth));
    fo.write (intToDWord (biHeight));
    fo.write (intToWord (biPlanes));
    fo.write (intToWord (biBitCount));
    fo.write (intToDWord (biCompression));
    fo.write (intToDWord (biSizeImage));
    fo.write (intToDWord (biXPelsPerMeter));
    fo.write (intToDWord (biYPelsPerMeter));
    fo.write (intToDWord (biClrUsed));
    fo.write (intToDWord (biClrImportant));
    }
    catch (Exception wbih) {
    wbih.printStackTrace ();
    }}
    /*
    *
    * intToWord 将整数转换为单字,返回值
    * 存储在一个双字节数组中。
    *
    */
    private byte [] intToWord (int parValue) {byte retValue [] = new byte [2];retValue [0] = (byte) (parValue & 0x00FF);
    retValue [1] = (byte) ((parValue >> 8) & 0x00FF);return (retValue);}/*
    *
    * intToDWord 将整数转换为双字,返回值
    * 存储在一个 4 字节数组中。
    *
    */
    private byte [] intToDWord (int parValue) {byte retValue [] = new byte [4];retValue [0] = (byte) (parValue & 0x00FF);
    retValue [1] = (byte) ((parValue >> 8) & 0x000000FF);
    retValue [2] = (byte) ((parValue >> 16) & 0x000000FF);
    retValue [3] = (byte) ((parValue >> 24) & 0x000000FF);return (retValue);}}
      

  3.   

    Toolkit.getDefaultToolkit().createImage(fileName);//创建Image对象
    然后画到Canvas上就是了
    保存的话用java.imageIO.ImageIO这个类中的write方法
      

  4.   

    我也出现了同样的问题
    我写了从ablum表中读字段data二进制数据
    //import java.io.*;
    import javax.imageio.*;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.sql.Blob;
    public class showimage_1 { public static void main(String[] args) {

    try{//datesource and select sql
     String sql="SELECT * FROM ablum where id=5";
     String acurl = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=image.mdb";
     //加载(sun公司)的JDBC-ODBC bridge驱动程序
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection conn = DriverManager.getConnection(acurl); 
    //show select result
    System.out.println("below you can see the result select from album:");
    System.out.println("=====================");
    System.out.println("连库成功!");
    Statement stmt=conn.createStatement();
    ResultSet rs=stmt.executeQuery(sql);
    ImageOutputStream op=createImageOutputStream();

        while(rs.next()){
    Blob blob=rs.getBlob( "data" );
    byte[] ab = blob.getBytes(1, (int)blob.length());
        op.write(ab);
    op.flush();
    op.close(); }
    stmt.close();
    conn.close();


     }
     catch(SQLException ex){
     System.out.println("SQL异常出错!");
     System.out.println(ex.getMessage());
     }
     catch(Exception ex){
     ex.printStackTrace();
    // 错误跟踪
     }
    }}
      

  5.   

    ImageOutputStream op=createImageOutputStream();
    在这行出现了错误提示
    上楼的朋友,还有大伙看看是怎么回事
      

  6.   

    sevenrui() 此BMP非彼BMP哦... 我是想看看源代码,想改点东西的,所以现成的方法不是想要的-_-
      

  7.   

    sevenrui() 没注意看你的问题,不好意思...我有QQ5486039,MSN上QQ再告诉你吧,我水平有限^ ^