如果有ImageIcon或Image对象,如何转为二进制流(byte[])呢?

解决方案 »

  1.   

    用ImageIO类的 write(RenderedImage im, String formatName, OutputStream output) 方法写到一个流中,另一端用ImageIO类的read(InputStream input) 方法读出来
      

  2.   

    我要将图片转为Byte[] 然后用UDP发送的~
      

  3.   

    BufferedImage
      public Raster getData()Raster
      public int[] getPixel(int x, int y, int[] iArray)
      

  4.   

    直接用文件流读取该图片就可以了,要选择字节流就行了,获得byte[],直接发送就可以了
      

  5.   

    我之前都遇到这个问题,后来写了两个双向转向的方法,希望可以帮到你。 /**
     * 转换Image数据为byte数组
     * 
     * @param image Image对象
     * @param format image格式字符串.如"jpeg","png"
     * @return byte数组
     */
    public static byte[] imageToBytes(Image image, String format)
    {
    BufferedImage bImage = new BufferedImage(image.getWidth(null), image
    .getHeight(null), BufferedImage.TYPE_INT_ARGB);
    Graphics bg = bImage.getGraphics();
    bg.drawImage(image, 0, 0, null);
    bg.dispose(); ByteArrayOutputStream out = new ByteArrayOutputStream();
    try
    {
    ImageIO.write(bImage, format, out);
    }
    catch (IOException e)
    {
    Log.log(null, "imageToBytes(): " + e);
    }
    return out.toByteArray();
    } /**
     * 转换byte数组为Image
     * 
     * @param bytes Image的bytes数据数组
     * @return Image
     */
    public static Image bytesToImage(byte[] bytes)
    {
    Image image = Toolkit.getDefaultToolkit().createImage(bytes); try
    {
    MediaTracker mt = new MediaTracker(new Label());
    mt.addImage(image, 0);
    mt.waitForAll();
    }
    catch (InterruptedException e)
    {
    Log.log(null, "preloadResource(): " + e);
    } return image;
    }
      

  6.   

    谢谢辣~~
    但是我要用Socket(TCP)连接传输Byte[]数组怎么弄呢?好像都只能传String的样子。
    怎么办?
      

  7.   

    是byte[]还是Byte[]?如果是后者你就用DataOutputStream吧。你看看DOC就知道了。
    如果是前者几乎每个输出流都有write(byte[])方法啊.