熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java圖像傳輸方法

2013-11-23 18:41:08  來源: Java核心技術 

  一序列化後傳輸

  圖像對象可以編碼成指定圖像格式文件保存在硬盤上需要時再對其進行解碼讀入內存但是除了這樣還有別的辦法可以將圖像對象保存在硬盤上嗎?熟悉Java I/O 的人也許可以想到采用對象序列化(Object serialization) BufferedImage 提供一般圖像管理

  BufferedImage 對象包括另外兩個對象Raster 和 ColorModelRaster 對象包含另外兩個對象DataBuffer 和 SampleModel不幸的是他們都沒有實現序列化所必需的 Serializable 接口所以無法直接對他們進行對象序列化 JAI 的 diajairemote 包裡有一個類 SerializableRenderedImage這個類實現了RenderedImage Serializable 接口可以將 RanderedImage 對象作為構造函數的參數實例化一個可以序列化的圖像對象

  查看JDK的文檔可以知道無論 Java D 中的 BufferedImage 還是 JAI 中的 PlanarImage 都實現了 RenderedImage 接口也就是說所有實現自 RenderedImage

  

  接口的對象均可作為參數包裝出一個 SerializableRenderedImage 類型對象將其序列化

  下面是一個簡單的例子說明了這個類的使用方法

  查看復制到剪切板打印

  import javaio*;

  import diajairemote*;

  import javaawtimage*;

  public class SomeSerializableClass implements Serializable {

  protected transient RenderedImage image;

  public SomeSerializableClass(RenderedImage image) {

  thisimage = image;

  }

  // Serialization method

  private void writeObject(ObjectOutputStream out) throws

  IOException {

  outdefaultWriteObject();

  outwriteObject(new SerializableRenderedImage(image true));

  }

  // Deserialization method

  private void readObject(ObjectInputStream in) throws IOException ClassNotFoundException {

  indefaultReadObject();

  image = (RenderedImage) inreadObject();

  }

  }

  二以字節流的方式傳輸

  圖像編碼

  因為圖像編碼解碼主要目的是針對圖像在網絡中的傳輸所以編碼之後的圖像不必保存在硬盤上可以直接放入一個字節數組

  查看復制到剪切板打印

  public byte[] getCompressedImage(BufferedImage image){

  byte[] imageData = null;

  try {

  ByteArrayOutputStream baos = new ByteArrayOutputStream();

  ImageIOwrite(image jpg baos);

  imageData = baostoByteArray();

  } catch (IOException ex) {

  imageData = null;

  }

  return imageData;

  }

  圖像解碼

  接收端接收到表示圖像數據的字節數組後對其進行解碼得到圖像對象因為我們在發送端將其編碼成JPEG格式所以可以直接在接收端使用ImageIO對其進行解碼

  查看復制到剪切板打印

  public BufferedImage getDecompressedImage(byte[] imageData){

  try {

  ByteArrayInputStream bais = new ByteArrayInputStream(imageData);

  return ImageIOread(bais);

  } catch (IOException ex) {

  return null;

  }

  }

  網絡傳輸

  因為圖像編碼之後是一個存在於內存中的字節數組所以可以使用IO流的方式將其發送到網絡的接收端接收端建立鏈接將其接收最常用的例如建立 Socket 連接等等


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25572.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.