none
如何对Canvas上内容做缩略图,类似word里面的缩略图? RRS feed

  • 问题

  • 我想对canvas上的内容做缩略图,类似于word里面的缩略图。canvas上的内容会移动(如移出边界),也能放大缩小,因此加了滚动条。如果使用Imagebrush的话,缩略图失真非常严重。使用visualbrush,如果viewbox设置为相对值,会显示canvas上的所有内容,移出边界的也会显示。如果设置为绝对值,缩略图会跟随滚动条进行滚动。怎么样才能做到就对canvas当前的页面内容缩略,边界外的不显示,不管放大缩小,就显示当前canvas上的内容?

    请问还有其他的解决方案没有?

    急盼解答!

    麻烦大家了!


    2012年1月10日 9:59

答案

  • 还是根据我的上次的那个思路下去吧,依据你现在遇到的问题,推荐使用 RenderTargetBitmap

        private void button3_Click(object sender, RoutedEventArgs e)
        {
          this.listBox1.Items.Clear();
          Canvas canvas = new Canvas();
          canvas.Width = this.listBox1.ActualWidth;
          canvas.Height = this.listBox1.ActualHeight / 5;
          RenderTargetBitmap bitmap = new  RenderTargetBitmap(300, 300, 96, 96, PixelFormats.Pbgra32);
          bitmap.Render(canvas1);      
          canvas.Background = new ImageBrush(bitmap);
          this.listBox1.Items.Add(canvas);
        }
    


    Sincerely, 


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    • 已建议为答案 MakubeXSoft 2012年1月12日 0:56
    • 取消建议作为答案 张柱敏 2012年1月12日 7:09
    • 已标记为答案 张柱敏 2012年1月13日 1:52
    2012年1月11日 6:48
    版主
  • ???

    • 已建议为答案 Jie BaoModerator 2012年1月12日 2:08
    • 取消建议作为答案 张柱敏 2012年1月12日 7:09
    • 已标记为答案 张柱敏 2012年1月13日 1:52
    • 已编辑 Shi Xin 2016年5月16日 9:36
    2012年1月11日 15:04
  • ???

    • 已标记为答案 张柱敏 2012年1月13日 1:44
    • 已编辑 Shi Xin 2016年5月16日 9:37
    2012年1月12日 11:36

全部回复

  • 非常感谢!但是缩略上面的内容还是会跟随滚动条滚动。对于canvas不管有没有滚动条,能不能缩略canvas上面的可视区域包括被滚动条遮住的内容?现在这种情况 移出 canvas边界之外的不显示了。
    2012年1月11日 1:47
  • 还是根据我的上次的那个思路下去吧,依据你现在遇到的问题,推荐使用 RenderTargetBitmap

        private void button3_Click(object sender, RoutedEventArgs e)
        {
          this.listBox1.Items.Clear();
          Canvas canvas = new Canvas();
          canvas.Width = this.listBox1.ActualWidth;
          canvas.Height = this.listBox1.ActualHeight / 5;
          RenderTargetBitmap bitmap = new  RenderTargetBitmap(300, 300, 96, 96, PixelFormats.Pbgra32);
          bitmap.Render(canvas1);      
          canvas.Background = new ImageBrush(bitmap);
          this.listBox1.Items.Add(canvas);
        }
    


    Sincerely, 


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    • 已建议为答案 MakubeXSoft 2012年1月12日 0:56
    • 取消建议作为答案 张柱敏 2012年1月12日 7:09
    • 已标记为答案 张柱敏 2012年1月13日 1:52
    2012年1月11日 6:48
    版主
  • ???

    • 已建议为答案 Jie BaoModerator 2012年1月12日 2:08
    • 取消建议作为答案 张柱敏 2012年1月12日 7:09
    • 已标记为答案 张柱敏 2012年1月13日 1:52
    • 已编辑 Shi Xin 2016年5月16日 9:36
    2012年1月11日 15:04
  • 我的ListBox是按照他之前的代码里有的, 哈哈。  你的方法不错。 推荐。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    2012年1月12日 2:08
    版主
  • 非常感谢您们!可能我表达的不是很清楚,缩略图需要显示面板上的所有内容,并不是只是显示可视区域的内容。但是不包括移出边界的内容。如下图:,按钮如果在canvas的边界上,缩略图也需要显示这个样子,通过滚动条滚动,按钮也不会显示完整的。
    2012年1月12日 7:08
  • 其实要显示多少, 显示谁,主要看你要 Render的大小和 Render的对象。不是很难,比如按照你所说的,你只要 

    bitmap.Render(scrollViewer1); 就可以了。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    2012年1月12日 7:49
    版主
  • ???

    • 已标记为答案 张柱敏 2012年1月13日 1:44
    • 已编辑 Shi Xin 2016年5月16日 9:37
    2012年1月12日 11:36
  • 非常感谢两位的回答!!!没想到在这里绕了这么大的弯路,主要是我对问题描述不清楚。只要设置 ClipToBounds属性就可以了。

    再次感谢你们,预祝你们春节快乐!

    2012年1月13日 1:44