java怎样用StringBuffer的二进制(图片转换的)生成ImageIcon对象?我把图片转成了二进制代码,存在了StringBuffer中,我想把StringBuffer的内容直接生成ImageIcon,然后在swing的jpanel中显示,不通过写文件到磁盘的步骤

解决方案 »

  1.   

    “我把图片转成了二进制代码”有没有这一步具体的代码如果 StringBuffer 里的内容格式无误,可以用 toString().getBytes() 得到 byte[]
      

  2.   

    我要把内存中 二进制数转为图片 在swing的jpanel中显示
      

  3.   

    试试取得二进制字节数组,然后使用ImageIcon(byte[] imageData) 生成一个ImageIcon对象!
      

  4.   

    StringBuffer可以存二进制数组么?
    你说这个二进制数组是什么型的?
    char[]?
    byte[]?
      

  5.   


    我的代码:    
           public static StringBuilder getbuffer() throws IOException{
            
          // StringBuilder bf=new StringBuilder();
            
            String path = "c://2013-08.jpg";
            File file = new File(path);        FileInputStream fis = new FileInputStream(file);
            byte[] b = new byte[fis.available()];
            StringBuilder str = new StringBuilder();//不建议用String         fis.read(b);        for(byte bs:b)
               {
                str.append(Integer.toBinaryString(bs));//转换为二进制
               }
           
            String str2=str.toString();
            
             System.out.println(str2.substring(0, 60));
            
            return str;
           }
      

  6.   


    能给几行关键代码么?我在网上找了,生成了ImageIcon,但是图片不显示
      

  7.   


    public Object getObject(byte[] b) {
    Object o=null;
    try {
    ByteArrayInputStream bais = new ByteArrayInputStream(b);
    ObjectInputStream ois;
    ois = new ObjectInputStream(bais);
    o =ois.readObject();
    // ArrayList str = (ArrayList) ois.readObject(); //读取类
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return o;
    }
    能帮你把字节转化成一个File对象
    剩下的就容易了吧。
    但不知道为啥,我总感觉这种得到的图片和原图不一样,
      

  8.   

    帮我看下我的代码为什么还是有点问题呢?
    package picToBin;import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;import javax.imageio.ImageIO;
    import javax.swing.JPanel;class ImagePanel extends JPanel { private BufferedImage image; public ImagePanel() {
    try {
    byte[] b=fileT0Byte();
    File file=(File) getObject(b);
    image = ImageIO.read(file);
    //image = ImageIO.read(new File("c:\\rose.jpg"));
    } catch (IOException ex) {
    // handle exception...
    }
    } @Override
    public void paintComponent(Graphics g) {
    g.drawImage(image, 0, 0, null);
    }
    public static byte[] fileT0Byte() throws IOException { String path = "c://2013-08.jpg";
    File file = new File(path); FileInputStream fis = new FileInputStream(file);
    byte[] b = new byte[fis.available()];
    fis.read(b);//写入到byte数组
    return b; }


    public static Object getObject(byte[] b) {
            Object o=null;
            try {
                ByteArrayInputStream bais = new ByteArrayInputStream(b);
                ObjectInputStream ois;
                ois = new ObjectInputStream(bais);
                o =ois.readObject();
                // ArrayList str = (ArrayList) ois.readObject(); //读取类
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return o;
        }



    }
      

  9.   

    你都 new 出一个 file 对象了,
    为什么不直接通过 ImageIO 去 read 一个 BufferedImage 对象出来呢?
      

  10.   

    为什么要用StringBuffer来存byte[]??????这个很奇怪啊