Привет всем, сижу над новым проектом, и как оказалось все таки 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 передавали путь к изображений. Надеюсь это вам помогло.
