java_的image 和 BufferedImage 和 byte[] 相互转换

=

=

一、byte[] to BufferedImage to Image(或者BufferedImage

public class BufferedImage extends java.awt.Image
                           implements WritableRenderedImage, Transparency

可以看出BufferedImage就是Image。

byte[] byteArray = new byte[1000];
// 文档:ByteArrayInputStream(byte[] buf)
// 文档:ByteArrayInputStream(byte[] buf, int offset, int length)
InputStream buffIn = new ByteArrayInputStream(byteArray, 0, byteArray.length);
BufferedImage bufferedImage = ImageIO.read(buffIn);
Image image = (Image) bufferedImage;
System.out.println(image.getGraphics());

二、Image to BufferedImage to byte[]

Image to BufferedImage:

// 获取 Image 对象的高度和宽度
int width = image.getWidth(null);
int height = image.getHeight(null);
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
//通过 BufferedImage 绘制图像并保存在其对象中
g.drawImage(image, 0, 0, width, height, null);
g.dispose();

BufferedImage to byte[ ]:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(bi, "png", bos);
return bos.toByteArray();

三、Image和BufferedImage 从哪里来

从文件来:

BufferedImage image = ImageIO.read(new File("1.gif"));

从内存网络等来:

public static Image getImageFromClipboard() throws Exception {
    Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();
    Transferable data = sysc.getContents(null);
    if (data != null) {
        if (data.isDataFlavorSupported(DataFlavor.imageFlavor)) {
            Image image = (Image) data.getTransferData(DataFlavor.imageFlavor);
            return image;
        }
    }
    return null;
}

四、显示BufferedImage

public void paint(Graphics g){

super.paint(g);

g.drawImage(image,x,y,width,height,null);    //image为BufferedImage类型

}

如果要自动调用paint方法,则需要调用repaint()方法;

参考好文档:

BufferedImage与byte[]互转 http://blog.csdn.net/xiazdong/article/details/6929975

java 中 image 和 byte[] 相互转换

=

=

猜你喜欢

转载自fantaxy025025.iteye.com/blog/2371683
今日推荐