海水正藍

          面朝大海,春暖花開
          posts - 145, comments - 29, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          一、需要用到的類

          java.awt.image.BufferedImage;

          javax.imageio.ImageIO;

          java.io.*;

           

          二、為什么要將BufferedImage轉(zhuǎn)為byte數(shù)組

           

          在傳輸中,圖片是不能直接傳的,因此需要把圖片變?yōu)樽止?jié)數(shù)組,然后傳輸比較方便;只需要一般輸出流的write方法即可;

          而字節(jié)數(shù)組變成BufferedImage能夠還原圖像;

           

          三、如何取得BufferedImage

           

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

           

          四、BufferedImage  ---->byte[]

           

          ImageIO.write(BufferedImage image,String format,OutputStream out);方法可以很好的解決問題;

          參數(shù)image表示獲得的BufferedImage;

          參數(shù)format表示圖片的格式,比如“gif”等;

          參數(shù)out表示輸出流,如果要轉(zhuǎn)成Byte數(shù)組,則輸出流為ByteArrayOutputStream即可;

          執(zhí)行完后,只需要toByteArray()就能得到byte[];

           

          五、byte[] ------>BufferedImage

           

          ByteArrayInputStream in = new ByteArrayInputStream(byte[]b);    //將b作為輸入流;

          BufferedImage image = ImageIO.read(InputStream in);     //將in作為輸入流,讀取圖片存入image中,而這里in可以為ByteArrayInputStream();

           

          六、顯示BufferedImage

           

          public void paint(Graphics g){

          super.paint(g);

          g.drawImage(image);    //image為BufferedImage類型

          }

           

          七、實例

           

          要求:編寫一個網(wǎng)絡程序,通過Socket將圖片從服務器端傳到客戶端,并存入文件系統(tǒng);

          Server端:

          package org.exam3;

          import java.awt.image.BufferedImage;
          import java.io.ByteArrayOutputStream;
          import java.io.DataOutputStream;
          import java.io.File;
          import java.net.ServerSocket;
          import java.net.Socket;

          import javax.imageio.ImageIO;

          public class T6Server {

          public static void main(String[] args) throws Exception {
          ServerSocket server = new ServerSocket(8888);
          Socket s = server.accept();
          DataOutputStream dout = new DataOutputStream(s.getOutputStream());
          BufferedImage image = ImageIO.read(new File("1.gif"));
          ByteArrayOutputStream out = new ByteArrayOutputStream();
          boolean flag = ImageIO.write(image, "gif", out);
          byte[] b = out.toByteArray();
          dout.write(b);
          s.close();
          }

          }



          Client端:

           

          package org.exam3;

          import java.awt.BorderLayout;
          import java.awt.Graphics;
          import java.awt.event.ActionEvent;
          import java.awt.event.ActionListener;
          import java.awt.image.BufferedImage;
          import java.io.ByteArrayInputStream;
          import java.io.DataInputStream;
          import java.io.File;
          import java.io.PrintWriter;
          import java.net.Socket;

          import javax.imageio.ImageIO;
          import javax.swing.JButton;
          import javax.swing.JFrame;
          import javax.swing.JPanel;

          public class T6Client extends JFrame {
          JButton button;
          MyPanel panel;
          public T6Client() {
          setSize(300, 400);
          button = new JButton("獲取圖像");
          add(button,BorderLayout.NORTH);
          button.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent event) {
          try {
          Socket s = new Socket("localhost",8888);
          PrintWriter out = new PrintWriter(s.getOutputStream());
          out.print("a");
          DataInputStream in = new DataInputStream(s.getInputStream());
          byte[]b = new byte[1000000];
          in.read(b);
          ByteArrayInputStream bin = new ByteArrayInputStream(b);
          BufferedImage image = ImageIO.read(bin);
          ImageIO.write(image, "gif", new File("2.gif"));
          s.close();
          } catch (Exception e) {
          }
          }
          });
          panel = new MyPanel();
          add(panel);

          }
          public static void main(String[] args) throws Exception {
          T6Client frame = new T6Client();
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setVisible(true);
          }

          }
          轉(zhuǎn)自:

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 磐石市| 河池市| 合作市| 上高县| 青岛市| 凯里市| 肥东县| 英山县| 福泉市| 同江市| 霍山县| 吉首市| 剑河县| 大冶市| 台湾省| 阳西县| 定西市| 手机| 孟连| 彝良县| 衡阳县| 南康市| 赣州市| 新营市| 大方县| 聊城市| 朔州市| 文成县| 乐平市| 祁连县| 慈利县| 翁牛特旗| 唐河县| 宜兰县| 南充市| 都兰县| 广宗县| 南靖县| 南部县| 平武县| 阆中市|