Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 3 của 3
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Làm thế nào để truyền ảnh có dung lượng lớn qua mạng?

    Giúp mình về vấn đề truyền ảnh qua mạng với:
    Mình lập trình truyền ảnh qua mạng bằng giao thức UDP
    đây là giao diện chuơng trình:

    khi truyền ảnh có dung lượng nhỏ thì OK, còn truyền ảnh dung lượng cỡ 200KB. VD ảnh này:

    thì nó hiện thông báo thế này

    Làm thế nào để khắc phục lỗi này vậy, mong các bác giúp đỡ mình phần này [IMG]images/smilies/Cry.gif[/IMG]
    Đây là code của mình:
    Mã:
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                CheckForIllegalCrossThreadCalls = false;
            }
    
            public byte[] imageToByteArray(System.Drawing.Image imageIn)
            {
                MemoryStream ms = new MemoryStream();
                imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                return ms.ToArray();
            }
    
            public Image byteArrayToImage(byte[] byteArrayIn)
            {
                MemoryStream ms = new MemoryStream(byteArrayIn);
                Image returnImage = Image.FromStream(ms);
                return returnImage;
            }
    
            private void btSend_Click(object sender, EventArgs e)
            {
                UdpClient send = new UdpClient();
                IPEndPoint iepRemote = new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtRemotePort.Text));
                byte[] data = new byte[4096];
                OpenFileDialog ofd=new OpenFileDialog();
                Image img;
                string path;
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    path = ofd.FileName;
                    img = Image.FromFile(path);
                    data = imageToByteArray(img);
                    send.Send(data, data.Length, iepRemote);
                }
            }
    
            private void btConnect_Click(object sender, EventArgs e)
            {
                Thread tuyen = new Thread(new ThreadStart(NhanDL));
                tuyen.Start();
            }
    
            private void NhanDL()
            {
                UdpClient recv = new UdpClient(int.Parse(txtLocalPort.Text));
                IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);
                byte[] data = new byte[4096];
                data = recv.Receive(ref iep);
                pic.Image = byteArrayToImage(data);
            }
        }

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Hic, không ai giúp mình à [IMG]images/smilies/mad.png[/IMG]

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Có thể một lần gửi lần lượt 1 lượng byte nhất định thay vì gửi cả file.
    Mã:
                MemoryStream ms = new MemoryStream();
                imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                byte[] data = new byte[512];
                ....
                int count = memStream.Read(data, 0, 512);// doc 512 byte
                while(count >0 ){ // trong khi con doc dc du lieu
                      send.Send(data, count, iepRemote);// send du lieu
                      count = memStream.Read(data, 0, 512);// doc tiep du lieu
                }

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •