как потоковое изображение с помощью приложения c # wpf

1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Web; 
using System.IO;

namespace WpfApp
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        public MainWindow(Stream stream)
        {
            InitializeComponent();
            String path = @"C:\Users\Public\Pictures\Sample Pictures\Jellyfish.jpg";
            var image = new BitmapImage();
            try
            {
                image.BeginInit();
                image.StreamSource = stream;
                image.EndInit();
                using (Stream bmpStream = System.IO.File.Open(path,System.IO.FileMode.Open))
                {
                    Image im = Image.FromStream(bmpStream);
                    //Bitmap img = (Bitmap)Image.FromFile("aa.gif", true);
                    //var im = ImageFromStream(bmpStream);
                    grid1.Background = new ImageBrush(new BitmapImage(new Uri(@"im")));
                }
                // return image;
            }

            catch (Exception a)
            {
                // return image;
            }
        }
        public void Window_Loaded(object sender, RoutedEventArgs e)
        {


        }


     }

}

Я использую приведенный выше код для потока jpg-изображения в виде растрового изображения и устанавливаю его в сетку с использованием С#, но Image im = Image.FromStream(bmpStream); показывает ошибку. Может ли кто-нибудь помочь мне в том, как передать jpg-изображение в растровое изображение и установить в сетку?

  • 0
    так JPG показывает в ваш вывод?
  • 0
    Ну, здравый смысл говорит, что локальная переменная недоступна через - btw. плохо сформированный сверху - URI. Как насчет чтения учебника по программированию WPF? Общий уровень основ.
Показать ещё 2 комментария
Теги:
wpf

1 ответ

2
Лучший ответ

Способ WPF обрабатывает и отображает изображения, немного отличается от того, как это делали WinForms. Большинство изображений, отображающих "вещи", нуждаются в ImageSource и вам нужно искать подходящий для использования. В этом случае вы должны иметь возможность использовать BitmapImage но в прошлый раз, когда я проверил это, вам нужно больше заботиться о правильном отображении содержимого байтового потока.

Этот фрагмент показывает, как вы должны получить это право работать BitmapImage:

private static BitmapImage LoadImage(Stream stream)
{
    // assumes that the streams position is at the beginning
    // for example if you use a memory stream you might need to point it to 0 first
    var image = new BitmapImage();

    image.BeginInit();
    image.CacheOption = BitmapCacheOption.OnLoad;
    image.StreamSource = stream;
    image.EndInit();

    image.Freeze();
    return image;
}

Как вы можете видеть, вам нужно сообщить изображению об использовании потока, как только он загрузится (или вы можете получить неприятные вещи, такие как ObjectDisposedException s.

Вы можете использовать возвращенный объект как свойство исходного изображения.

Поэтому я думаю, что то, что вы ищете, это примерно так:

public MainWindow(Stream stream)
{
    InitializeComponent();
    grid1.Background = new ImageBrush(LoadImage(stream));
}
  • 0
    я использую этот код, и я даю image.UriSource = новый Uri (путь), но изображение не установлено в сетке. что я могу сделать
  • 0
    Вы путаете понятия ... если вам просто нужно отобразить статический файл, просто вставьте его в свой проект и используйте его (вы можете просто перетащить), но вы попросили способ вывести изображение из потока
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню