一、BufferedImage类型与Byte[]流之间相互转化
1.需要用到的类
java.awt.image.BufferedImage;
javax.imageio.ImageIO;
java.io.*;
2.为什么要将BufferedImage转为byte数组
在传输中,图片是不能直接传的,因此需要把图片变为字节数组,然后传输比较方便;只需要一般输出流的write方法即可;而字节数组变成BufferedImage能够还原图像;
3.如何取得BufferedImage
BufferedImage image = ImageIO.read(new File("1.gif"));
4.BufferedImage ------>byte[]
ImageIO.write(BufferedImage image,String format,OutputStream out);方法可以很好的解决问题;
参数image表示获得的BufferedImage;
参数format表示图片的格式,比如“gif”等;
参数out表示输出流,如果要转成Byte数组,则输出流为ByteArrayOutputStream即可;
执行完后,只需要toByteArray()就能得到byte[];
5.byte[] ------>BufferedImage
ByteArrayInputStream in = new ByteArrayInputStream(byte[]b); //将b作为输入流;
BufferedImage image = ImageIO.read(InputStream in); //将in作为输入流,读取图片存入image中,而这里in可以为ByteArrayInputStream();
6.显示BufferedImage
public void paint(Graphics g){
super.paint(g);
g.drawImage(image); //image为BufferedImage类型
}
二、BufferedImage与Image之间的相互转换
1.
BufferedImage input = ImageIO.read(file1);
Image big = input.getScaledInstance(256, 256,Image.SCALE_DEFAULT); //放缩图片
BufferedImage inputbig = new BufferedImage(256, 256,BufferedImage.TYPE_INT_BGR);
inputbig.getGraphics().drawImage(input, 0, 0, 256, 256, null); //画图
2.
public BufferedImage toBufferedImage(Image image) {
if (image instanceof BufferedImage) { return (BufferedImage) image; }
image = new ImageIcon(image).getImage();
//ImageIcon与Image之间的转化: ImageIcon icon = new ImageIcon(image); image = icon.getImage();
boolean hasAlpha = false;
BufferedImage bimage = null;
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
try {
int transparency = Transparency.OPAQUE;
if (hasAlpha) { transparency = Transparency.BITMASK; }
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
bimage = gc.createCompatibleImage(image.getWidth(null),
image.getHeight(null), transparency);
} catch (HeadlessException e) {
}
if (bimage == null) {
int type = BufferedImage.TYPE_INT_RGB;
if (hasAlpha) { type = BufferedImage.TYPE_INT_ARGB; }
bimage = new BufferedImage(image.getWidth(null),image.getHeight(null), type);
}
Graphics g = bimage.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
return bimage;
}