Решено! Как в Image.Source из UWP преобразовать массив байтов в изображение.

Привет всем, сижу над новым проектом, и как оказалось все таки UWP это еще геморройнее чем WPF. А суть проблемы заключалось в следующем, я пишу клиент-серверное приложение. Сервер передает фотку в виде массива байто. А на стороне клиента в приложении на UWP необходимо принять этот массив байт и конвертировать в изображение. Все это конечно можно было без труда сделать сохранив картинку на диск, но я не шел легким путем, при том что я писал приложение под windows phone, а там свои заморочки. Спустя 2 часа попыток и пыток, все таки у меня получилось. Да бы не потерять в будущем код, возможно он и вам пригодится выкладываю его здесь.

 private void SendFoto()
        {
            //отправка команды на сервер
            IPEndPoint ipEndsend = new IPEndPoint(IPAddress.Parse(address), port);
            Socket socksend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
            socksend.Connect(ipEndsend);


            string message = "Foto";
            byte[] data = Encoding.ASCII.GetBytes(message);
            socksend.Send(data);
            //   socksend.Send(Encoding.ASCII.GetBytes("test"));


            //нижняя часть получения ответа в виде файла от сервера
            int bytes = 0;
            const int bufferSize = 8192;
            int val = 0;
            using (MemoryStream memStream = new MemoryStream())
            {
                byte[] buffer = new byte[bufferSize];
                do
                {
                    val = bytes;
                    int received = socksend.Receive(buffer);
                    memStream.Write(buffer, 0, received);
                    bytes += received;
                    // Console.WriteLine(bytes);
                }
                while (socksend.Available > 0);
                // while (val != bytes);
                memStream.Seek(0, SeekOrigin.Begin);

                BitmapImage bmp = new BitmapImage();
                bmp.SetSource(memStream.AsRandomAccessStream());
                image.Source = bmp;
            }
            bytes = 0;
            // закрываем сокет
            socksend.Shutdown(SocketShutdown.Both);
            //   socksend.Close();
        }

Загвоздка была в незнании схожих методов из wpf, без определенных функций, которые ввели меня в заблуждение. Однако мне все же удалось использовать в качестве источника MemoryStream для BitmapImage, так большинство примеров через URL передавали путь к изображений. Надеюсь это вам помогло.

Обновлено: 19.12.2018 — 21:26

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.