Передача изображения через WCF и отображает их в WPF datagrid

Извлечение данных с использованием метода get

  def addperson(request):
        data = request.POST
        name = data.get('na', '')
        birthdate = data.get('bi', '')
        description= data.get('de', '')
        radiovalue= data.get('ra', '')  

        person=Person.objects.create(
        name=name,date=birthdate,description=description,
        gender=radiovalue
        )
        person.save()
        return render(request,'./home.html')
6
задан Peter Mortensen 25 July 2015 в 21:13
поделиться

2 ответа

Я не говорю, что это единственное или лучшее решение, но оно работает следующим образом:

Вам нужно сделать:

Создать метод WCF, который вернет изображение по некоторому идентификатору или что-то еще. Он должен возвращать байтовый массив (byte []):

public byte[] GetImage(int id)
{
  // put your logic of retrieving image on the server side here
}

В вашем классе данных (объекты, отображаемые в сетке) создайте свойство Image, его получатель должен вызвать метод WCF и преобразовать байтовый массив в BitmapImage:

public BitmapImage Image
{
  get
  {
  // here - connection is your wcf connection interface
  //        this.ImageId is id of the image. This parameter can be basically anything
  byte[] imageData = connection.GetImage(this.ImageId);    

  // Load the bitmap from the received byte[] array
  using (System.IO.MemoryStream stream = new System.IO.MemoryStream(imageData, 0, imageData.Length, false, true))
    {
    BitmapImage bmp = new BitmapImage();
    bmp.BeginInit();
    bmp.StreamSource = stream;

    try
      {
      bmp.EndInit();
      bmp.Freeze(); // helps for performance

      return bmp;
      }
    catch (Exception ex)
      {
      // Handle exceptions here
      }

    return null; // return nothing (or some default image) if request fails
    }
  }
}

В вашем Шаблон ячейки (или где-либо еще) помещает элемент управления Image и привязывает его свойство Source к созданному выше свойству Image:

<DataTemplate> <!-- Can be a ControlTemplate as well, depends on where and how you use it -->
  <Image
    Source={Binding Image, IsAsync=true}
    />
</DataTemplate>

Самый простой способ не останавливать пользовательский интерфейс при получении изображений - установить свойство IsAsync в значение false, как я. Но есть что улучшить. Например, вы можете показать анимацию загрузки во время загрузки изображения.

8
ответ дан 16 December 2019 в 21:46
поделиться

Можно ли загрузить изображение WPF из потока? Если это так, то вы можете написать службу WCF для возврата типа System.IO.Stream.

0
ответ дан 16 December 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: