我现在已经有BufferedImage image, 怎么得到一个byte[]的数组呢??但是不要经过文件转。否则太慢了了。

解决方案 »

  1.   

    BufferedImage srcImage = ImageIO.read(new File("c:/xxx.jpg"));
    byte[] data = ((DataBufferByte) srcImage.getData().getDataBuffer()).getData();
      

  2.   

    那怎么通过byte[] data 再次得到一个图片呢??
      

  3.   

    java.lang.ClassCastException: java.awt.image.DataBufferInt报错了。BufferedImage srcImage  = rebot.createScreenCapture(rec);我的BufferedImage 是从rebot.createScreenCapture(rec);得到的。
      

  4.   

    一个BufferedImage可以得一个Int[]数组.用它的getRGB方法.取得的是它的相素信息.
    从一个int[]到BufferedImage可以用MemoryImageSource.我想取得byte[]数组是没有什么意义的.当然不是不可以实现.用ImageIO类.
    BufferedImage bi=ImageIO.read(new ByteArrayInputSream(byte[]);
    ImageIO.write(bufferedImage,"gif",new ByteArrayOutputStream(new byte[20000]));然后你就可以从这个ByteArrayOutputStream取得你想要的byte啦!
    不过这样一点意义也没有,你无法改任何相素.
      

  5.   

                BufferedImage image=ImageIO.read(new File("c://test//error.jpg"));
                BufferedImage imageSub=image.getSubimage(100,100,200,200);
                ByteArrayOutputStream bao=new ByteArrayOutputStream();
                
                ImageIO.write(imageSub, "jpg",bao);
                byte[] bytes= bao.toByteArray();
                ByteArrayInputStream bis=new ByteArrayInputStream(bytes);
                
                    String strsql="insert into aa(a) values (?)";
                    NoWebConn connObj=new NoWebConn();//自己的一个连接类,只是为了连接数据库
                    Connection conn=connObj.getConnection();
                    java.sql.PreparedStatement ppstmt=conn.prepareStatement(strsql);
                    ppstmt.setBinaryStream (1, bis,bytes.length);
                    
                    ppstmt.executeUpdate();
                    ppstmt.close();
      

  6.   

    public class ImageUtil { /**
     * 转换Image数据为byte数组
     * @param image
     *            Image对象
     * @param format
     *            image格式字符串.如"gif","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) {
    e.printStackTrace();
    }
    return out.toByteArray();
    } /**
     * 转换byte数组为Image
     * @param 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) {
    e.printStackTrace();
    } return image;
    }
    }