none
Inkcanvas或者canvas可以对它们的点阵形式进行操作吗? RRS feed

  • 问题

  • 各位高手,

    请教一下!

    Inkcanvas或者canvas能不能获得它们的点阵表示形式,然后以处理点阵的方式,来使用这两个控件呢?


    Best Regards! C.Lu
    2011年3月30日 3:56

答案

  • 点阵像素,看样子有很多点或者图形你要绘制. 所以即使你开启一些缓存的特性或者在绘制的时候做预处理,有时候也很难达到你要的效果.  我还是建议你尝试下其他的技术把 WPF在对于大量图形绘制的时候确实有点技术瓶颈, (我记得官方也说过WPF并不适合去做一个游戏) 所以尝试下 DX 毕竟他是专门用来针对图形处理的。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 C.Lu 2011年4月2日 5:20
    2011年4月1日 8:54
    版主

全部回复

  • canvas 本身就是基于像素的,而且有很多变换函数,你说的点阵就是像素罢?

    2011年3月30日 8:01
  • 是啊,我能获得canvas的像素矩阵,并进行操作吗?


    Best Regards! C.Lu
    2011年3月30日 8:55
  • 可能我这么讲,很不好理解。

    可以打个比方,现在要在canvas上画一根白色的对角线,我想知道有没有如下的办法实现:

    第一步:获得Canvas的像素矩阵;

    第二步:找到对角线上的各个点,并描成白色;

    第三步:再将处理过的矩阵赋回去;

    最后,可以看到canvas上有了一根白色对角线。


    Best Regards! C.Lu
    2011年3月30日 9:04
  • 不好意思,WPF无法这么直接的操作一个Panel中的像素的。Panel中的成员都是作为一个UIElement存在的。你如果想要具体操作绘制的特性,我觉得不要限定死去使用Canvas, 而是直接在一个Visual 的OnRender 方法中去Draw, 或者 如你以前所实现的,使用 DrawContext 来绘制内容。

    还有,如果你已经在你的Panel中加入了这条线条, Line 对象,为何你不直接操作这个Line 对象,而要从Canvas的像素入手呢?

     

    不过,说到像素级别的事,我想起了WPF是支持 Pixel Shader的,你可以尝试了解一下,关于Pixel Shader请看下论坛FAQ:http://social.msdn.microsoft.com/Forums/zh-CN/wpfzhchs/thread/5f60098c-4d49-4ba6-a31c-c86c76a51d8a

     

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年3月30日 16:31
    版主
  • 请问一下,DrawContext 和在canvas上用path绘图相比,哪个的执行速度会快一些呢?


    Best Regards! C.Lu
    2011年3月31日 1:33
  • 说起性能的话,前者比后者要好些.前者一般来说只是一个element对象的内容绘制,任何布局改变也只会影响着一个对象,后者就可能会有很多element受到影响。还有,假如你用了 BitmapCacheBrush  去缓存element图像的话,性能会更好一点。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年3月31日 3:23
    版主
  • 您的意思是不是,如果我用 BitmapCacheBrush去作为canvas的background的话,会提高canvas上的绘图效率?


    Best Regards! C.Lu
    2011年3月31日 7:09
  • 这个我也不能说绝对了,你还是百闻不如一试. 试一下就知道了. 一个合适的环境加上好的代码逻辑是可以提高性能的,但我们也知道不排除比较特殊的 糟糕的实现还会降低性能. 我只能说这个方向是可行,需要你自己继续尝试了.


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年3月31日 10:06
    版主
  • 试了一下,没什么改善啊。


    Best Regards! C.Lu
    2011年4月1日 6:56
  • 点阵像素,看样子有很多点或者图形你要绘制. 所以即使你开启一些缓存的特性或者在绘制的时候做预处理,有时候也很难达到你要的效果.  我还是建议你尝试下其他的技术把 WPF在对于大量图形绘制的时候确实有点技术瓶颈, (我记得官方也说过WPF并不适合去做一个游戏) 所以尝试下 DX 毕竟他是专门用来针对图形处理的。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 C.Lu 2011年4月2日 5:20
    2011年4月1日 8:54
    版主