BufferedImageとbyteの相互回転
8167 ワード
まず、巨牛巨牛の人工知能のチュートリアルを共有します.私が何気なく発見しました.教程は基础がゼロなだけではなくて、分かりやすくて、その上とても面白くてユーモアがあって、また时々内包の下ネタがあって、小说を読むように、はは~私は勉强している中で、とても牛だと感じて、だからみんなに分かち合います!ここをクリックするとチュートリアルにジャンプできます
一、必要なクラス
java.awt.image.BufferedImage;
javax.imageio.ImageIO;
java.io.*;
二、なぜBufferedImageをbyte配列に変換するのか
伝送では、画像は直接伝送できないので、画像をバイト配列に変えて伝送するのが便利です.一般的な出力ストリームのwriteメソッドだけでよい.
バイト配列がBufferedImageになると画像を復元できます.
三、BufferedImageの取得方法
BufferedImage image = ImageIO.read(new File("1.gif"));
四、BufferedImage---->byte[]
ImageIO.write(BufferedImage image,String format,OutputStream out);方法は問題をよく解決することができる.
パラメータイメージは、取得したBufferedImageを表す.
パラメータformatは、「gif」などの画像のフォーマットを表す.
パラメータoutは出力ストリームを表し、Byte配列に変換する場合、出力ストリームはByteArrayOutputStreamでよい.
実行が完了すると、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,x,y,width,height,null);//イメージはBufferedImageタイプ
}
paintメソッドを自動的に呼び出す場合は、repaint()メソッドを呼び出す必要があります.
七、実例
要求:Socketを通じて画像をサーバーからクライアントに転送し、ファイルシステムに保存するネットワークプログラムを作成する.
サーバ側:
Client:
人工知能チュートリアルの参照
一、必要なクラス
java.awt.image.BufferedImage;
javax.imageio.ImageIO;
java.io.*;
二、なぜBufferedImageをbyte配列に変換するのか
伝送では、画像は直接伝送できないので、画像をバイト配列に変えて伝送するのが便利です.一般的な出力ストリームのwriteメソッドだけでよい.
バイト配列がBufferedImageになると画像を復元できます.
三、BufferedImageの取得方法
BufferedImage image = ImageIO.read(new File("1.gif"));
四、BufferedImage---->byte[]
ImageIO.write(BufferedImage image,String format,OutputStream out);方法は問題をよく解決することができる.
パラメータイメージは、取得したBufferedImageを表す.
パラメータformatは、「gif」などの画像のフォーマットを表す.
パラメータoutは出力ストリームを表し、Byte配列に変換する場合、出力ストリームはByteArrayOutputStreamでよい.
実行が完了すると、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,x,y,width,height,null);//イメージはBufferedImageタイプ
}
paintメソッドを自動的に呼び出す場合は、repaint()メソッドを呼び出す必要があります.
七、実例
要求:Socketを通じて画像をサーバーからクライアントに転送し、ファイルシステムに保存するネットワークプログラムを作成する.
サーバ側:
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(8889); System.out.println(" ... 8889"); Socket s = server.accept(); while(true){ System.out.println(" , ..."); DataOutputStream dout = new DataOutputStream(s.getOutputStream()); BufferedImage image = ImageIO.read(new File("1.gif")); // 1.gif ByteArrayOutputStream out = new ByteArrayOutputStream(); boolean flag = ImageIO.write(image, "gif", out); byte[] b = out.toByteArray(); dout.write(b); s.close(); System.out.println(" , ... 8889"); s = server.accept(); } }}
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.ByteArrayOutputStream;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; JPanel panel; int count = 0; BufferedImage image ; 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",8889); PrintWriter out = new PrintWriter(s.getOutputStream()); out.print("a"); DataInputStream in = new DataInputStream(s.getInputStream()); byte[]b = new byte[1024]; ByteArrayOutputStream bout = new ByteArrayOutputStream(); int length = 0; while((length=in.read(b))!=-1){ bout.write(b, 0, length); } ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); image = ImageIO.read(bin); repaint(); ImageIO.write(image, "gif", new File("output-"+count+".gif")); count++; s.close(); } catch (Exception e) { } } }); panel = new JPanel(); add(panel); } @Override public void paint(Graphics g){ super.paint(g); g.drawImage(image, 20, 20, 300, 150, null);//image BufferedImage } public static void main(String[] args) throws Exception { T6Client frame = new T6Client(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }}
人工知能チュートリアルの参照