C# 获取网站的缩略图?

C# 获取网站的缩略图?,c#,wpf,thumbnails,itemscontrol,C#,Wpf,Thumbnails,Itemscontrol,我尝试了这段代码来使用网站截图DLL获取网站的缩略图 但是图像不会显示在我的itemscontrol中,并且我没有收到任何错误 public void ImagesActivities() { //sep s = new sep(); var images = new ObservableCollection<sep>(); var wcf = new ServiceReferenceSites.SiteEnPlusServiceClient(); f

我尝试了这段代码来使用网站截图DLL获取网站的缩略图 但是图像不会显示在我的itemscontrol中,并且我没有收到任何错误

public void ImagesActivities()
{
    //sep s = new sep();
    var images = new ObservableCollection<sep>();
    var wcf = new ServiceReferenceSites.SiteEnPlusServiceClient();
    foreach (var item in wcf.GetAll())
    {
        sep s = new sep();
        s.title = item.title;
        s.thumbnail = (System.Drawing.Image)GetThumbImage(item.urlsite);
        images.Add(s);
    }
    _activityList.ItemsSource = images;
}

private Bitmap GetThumbImage(string s)
{

    WebsitesScreenshot.WebsitesScreenshot _Obj;
    _Obj = new WebsitesScreenshot.WebsitesScreenshot();
    WebsitesScreenshot.WebsitesScreenshot.Result _Result;
    _Result = _Obj.CaptureWebpage(s);
    if (_Result == WebsitesScreenshot.
                WebsitesScreenshot.Result.Captured)
    {
        _Obj.ImageWidth = 200;
        _Obj.ImageHeight = 100;
        _Obj.ImageFormat = WebsitesScreenshot.
            WebsitesScreenshot.ImageFormats.PNG;
        return _Obj.GetImage();
    }
    else
        return null;
}

谁能帮帮我吗。

基本上你一直在画空值。旧式位图在WPF中的传播效果并不理想。您可以更改此代码

   sep s = new sep();
    s.title = item.title;
    s.thumbnail = (System.Drawing.Image)GetThumbImage(item.urlsite);
对此

        Sep sep = new Sep();
        sep.Title = "title";
        var bmp = GetThumbImage("xxx");
        using (MemoryStream memory = new MemoryStream())
        {
            bmp.Save(memory, ImageFormat.Png);
            memory.Position = 0;
            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.BeginInit();
            bitmapImage.StreamSource = memory;
            bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
            bitmapImage.EndInit();
            sep.ThumbnailImage = bitmapImage;
        }
这段代码在位图上运行一个特殊的转换,以便它可以用作WPF图像源

“sep”类是使用如下ImageSource声明的

public class Sep : INotifyPropertyChanged
{
    private string _title;
    public string Title
    {
        [DebuggerStepThrough]
        get { return _title; }
        [DebuggerStepThrough]
        set
        {
            if (value != _title)
            {
                _title = value;
                OnPropertyChanged("Title");
            }
        }
    }
    private ImageSource _thumbnailImage;
    public ImageSource ThumbnailImage
    {
        [DebuggerStepThrough]
        get { return _thumbnailImage; }
        [DebuggerStepThrough]
        set
        {
            if (value != _thumbnailImage)
            {
                _thumbnailImage = value;
                OnPropertyChanged("ThumbnailImage");
            }
        }
    }
    #region INotifyPropertyChanged Implementation
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string name)
    {
        var handler = System.Threading.Interlocked.CompareExchange(ref PropertyChanged, null, null);
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }
    #endregion
}

从长远来看,您可以考虑将转换重构为iValueCurrter。

您的SEP类的定义是什么?我编辑我的问题,您可以对我的SEP类答案的定义进行修改……仍然一无所获,一切正常,但图像未显示项目在我的itemscontrol中显示良好(因为我可以看到标题),但图像未显示是的,我更改了imagebrush的绑定(我做了所有更改)这是我在更改后执行代码时得到的结果[1]:我还认为强制转换工作不正常。但我确信函数“GetThumbImage”返回位图
        Sep sep = new Sep();
        sep.Title = "title";
        var bmp = GetThumbImage("xxx");
        using (MemoryStream memory = new MemoryStream())
        {
            bmp.Save(memory, ImageFormat.Png);
            memory.Position = 0;
            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.BeginInit();
            bitmapImage.StreamSource = memory;
            bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
            bitmapImage.EndInit();
            sep.ThumbnailImage = bitmapImage;
        }
public class Sep : INotifyPropertyChanged
{
    private string _title;
    public string Title
    {
        [DebuggerStepThrough]
        get { return _title; }
        [DebuggerStepThrough]
        set
        {
            if (value != _title)
            {
                _title = value;
                OnPropertyChanged("Title");
            }
        }
    }
    private ImageSource _thumbnailImage;
    public ImageSource ThumbnailImage
    {
        [DebuggerStepThrough]
        get { return _thumbnailImage; }
        [DebuggerStepThrough]
        set
        {
            if (value != _thumbnailImage)
            {
                _thumbnailImage = value;
                OnPropertyChanged("ThumbnailImage");
            }
        }
    }
    #region INotifyPropertyChanged Implementation
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string name)
    {
        var handler = System.Threading.Interlocked.CompareExchange(ref PropertyChanged, null, null);
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }
    #endregion
}