9
38
1,438
130,958
  현재접속자 : 1 (회원 0)
내 공부 > 프로그래밍
 
작성일 : 22-04-06 10:52
c# 이미지 송수신
 글쓴이 : Minuk Y.
조회 : 1,090  
   https://phantom00.tistory.com/14 [776]
핵심

 * 이미지를 읽어와서 바이트 어레이로 변환
        public byte[] ImageToByteArray(System.Drawing.Image image)
        {
            MemoryStream ms = new MemoryStream();
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            return ms.ToArray();
        }

 * 바이트 어레이 받아온것을 이미지로 변환
        this.pictureBox1.Image = byteArrayToImage(_data2);



서버 쪽
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 이미지 읽어오기(하드)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog dia = new OpenFileDialog();
            dia.Multiselect = false;
            dia.Filter = "jpg files|*.jpg";

            if (dia.ShowDialog() == DialogResult.OK)
            {
                this.pictureBox1.ImageLocation = dia.FileName;
            }
        }

        /// <summary>
        /// 이미지를 바이트로
        /// https://www.codeproject.com/Articles/15460/C-Image-to-Byte-Array-and-Byte-Array-to-Image-Conv
        /// </summary>
        /// <param name="image"></param>
        /// <returns></returns>
        public byte[] ImageToByteArray(System.Drawing.Image image)
        {
            MemoryStream ms = new MemoryStream();
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            return ms.ToArray();
        }

        /// <summary>
        /// 서버 대기
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            this.button3.Enabled = false;

            Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 8081);

            sListener.Bind(ipEndPoint);
            sListener.Listen(20);

            Console.WriteLine("클라이언트 연결을 대기합니다.");

            Socket sClient = sListener.Accept();
            IPEndPoint ip = (IPEndPoint)sClient.RemoteEndPoint;
            Console.WriteLine("주소 {0} 에서 접속", ip.Address);

            Byte[] _data = ImageToByteArray(this.pictureBox1.Image);
            sClient.Send(BitConverter.GetBytes(_data.Length));
            Thread.Sleep(5); //  슬립 없이 보내면 이미지 데이터 송신 오류 발생!!!!!!!!!!!
            sClient.Send(_data);

            sListener.Close();
        }
    }
}
 

 

클라이언트 쪽

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 소켓으로 읽어오기
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            Socket sClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8081);
            sClient.Connect(ipEndPoint);
            Byte[] _data = new byte[256];
            sClient.Receive(_data);
            int iLength = BitConverter.ToInt32(_data, 0);

            Byte[] _data2 = new byte[iLength];
            sClient.Receive(_data2);

            this.pictureBox1.Image = byteArrayToImage(_data2);

            sClient.Close();
        }

        /// <summary>
        /// 바이트를 image로
        /// https://www.codeproject.com/Articles/15460/C-Image-to-Byte-Array-and-Byte-Array-to-Image-Conv
        /// </summary>
        /// <param name="byteArrayIn"></param>
        /// <returns></returns>
        public Image byteArrayToImage(byte[] byteArrayIn)
        {
            MemoryStream ms = new MemoryStream(byteArrayIn);
            Image returnImage = Image.FromStream(ms);
            return returnImage;
        }
    }
}

 
   
 

Copyright ⓒ Minuk Y. All rights reserved. . .