请问怎么从BufferedImage image得到byte[]数据。 我现在已经有BufferedImage image, 怎么得到一个byte[]的数组呢??但是不要经过文件转。否则太慢了了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BufferedImage srcImage = ImageIO.read(new File("c:/xxx.jpg"));byte[] data = ((DataBufferByte) srcImage.getData().getDataBuffer()).getData(); 那怎么通过byte[] data 再次得到一个图片呢?? java.lang.ClassCastException: java.awt.image.DataBufferInt报错了。BufferedImage srcImage = rebot.createScreenCapture(rec);我的BufferedImage 是从rebot.createScreenCapture(rec);得到的。 一个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啦!不过这样一点意义也没有,你无法改任何相素. 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(); 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; }} 【JAVA NIO多线程访问问题】 --在线等候,立马给分 关于protected修饰的一个问题? JFileChooser问题,值得高手挑战的问题 问一个很菜的问题:什么是stub? 请问怎样才叫一个类包含另一个类,而不是包含一个类的对象 哪里有Java图形学方面的书籍可以下载?(带址有分!) 为什么提示出错? 项目咨询(有些跑错地方,班竹嫌碍就删掉吧) 我要用三层结构完成一个很大的系统,请问:用JAVA好,还是用C++或其他的好呢? 关于java的应用程序和小应用之间的异同 Java与MySQL连接的问题? 在项目管理中,大家都用什么来进行bug/defect管理和跟踪?200分
byte[] data = ((DataBufferByte) srcImage.getData().getDataBuffer()).getData();
从一个int[]到BufferedImage可以用MemoryImageSource.我想取得byte[]数组是没有什么意义的.当然不是不可以实现.用ImageIO类.
BufferedImage bi=ImageIO.read(new ByteArrayInputSream(byte[]);
ImageIO.write(bufferedImage,"gif",new ByteArrayOutputStream(new byte[20000]));然后你就可以从这个ByteArrayOutputStream取得你想要的byte啦!
不过这样一点意义也没有,你无法改任何相素.
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();
* 转换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;
}
}