【问题标题】:Get thumbnail images of websites?获取网站的缩略图?
【发布时间】:2014-06-18 10:33:34
【问题描述】:

我尝试使用此代码使用网站截图 DLL 获取网站的缩略图 但图像没有显示在我的项目控件中,我没有收到任何错误。

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;
}

这是我的 itemscontrol 的代码:

  <ItemsControl x:Name="_activityList"  HorizontalAlignment="Right" Margin="0,10,10,10"  Width="760">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Columns="5" IsItemsHost="True"/>
                <!--<StackPanel Orientation="Horizontal" IsItemsHost="True"/>-->
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                    <Button Grid.Row="0" Margin="10,20,0,0" BorderThickness="0" Height="100" Width="200">
                        <Button.Background>
                            <ImageBrush ImageSource="{Binding thumbnail}"  />
                        </Button.Background>
                    </Button>
                    <TextBlock Grid.Row="1" x:Name="nom" Margin="10,0,0,0" TextAlignment="Center" Text="{Binding title}" VerticalAlignment="Center"/>
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

这是我的 sep 课程

public class sep
{
    public string title { get; set; }
    public System.Drawing.Image thumbnail { get; set; }
}

谁能帮帮我。

【问题讨论】:

  • 你的“sep”类的定义是什么?
  • 我编辑我的问题,你可以定义我的 sep 类
  • 答案已修改.....

标签: c# wpf thumbnails itemscontrol


【解决方案1】:

基本上你一直在绘制空值。旧样式的位图并不能很好地融入 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 ImageSource。

'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
}

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

【讨论】:

  • 仍然一无所获,一切正常,但图像不显示
  • 项目在我的项目控件中显示得很好(因为我可以看到标题)但图像没有显示
  • 是的,我改变了imagebrush的绑定(我做了所有的改变)
  • 这是我在更改 [1] 后执行代码时得到的结果:i.stack.imgur.com/Na7zv.png
  • 我也认为演员无法正常工作。但我可以肯定的是函数“GetThumbImage”返回一个位图
猜你喜欢
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 2015-12-13
  • 2017-05-01
  • 2013-03-08
  • 2018-05-19
相关资源
最近更新 更多