请问这句话如何理解?

我在看PtRaw控件时,其中有这样一句话,一直没有很好的理解,现求教各位,望给予指点!
这句话是这样的:
You must refresh the contents of the canvas whenever they become damaged. This is necessary because Photon doesn’t keep track of the widget’s raw contents for you. It’s more efficient to have you, as application programmer, maintain the original data structure and redraw the contents of the canvas. If it takes a long time to render the contents of the canvas, consider rendering them into an image and copying the image into the canvas when it’s damaged. 请问红色粗体字这句话如何理解?How to render them into an image?
望指教!谢谢!

这句话其实就说明了你前面遇到的直线丢失的问题。因为Photon是不会记得你之前画了什么东西的。所以你需要自己来处理这样的问题。比如联系你之前提到的问题,你可以用一个数组,把需要的点都记下来。然后每次不是只画一条,而是所有的都再画一次。这样你要的曲线就有了。

但这样性能会怎样你需要实际测一下。

红色的字体其实就是作这样的一个提醒。它大概是说“如果重新画需要太长的时间,你可以把它们绘制成一个图片,有需要的时候只需把图片COPY到画布上。”对于复杂的应用,我想COPY一下比画许多直线,曲线什么的总是快很多的。

不过我相信你的性能应该没有什么很大的影响。只是按你的描述,为什么不用PtTrend或PtMTrend控件。

谢谢你的回复。我先解释一下,我之所以没用PtTrend控件,是因为PtTrend控件不能保留整个波形(该控件可以设置波形向左移动或向右移动,这样,当曲线布满整个画布时,再有数据到来,曲线就会向左或向右移动,把前面已经画好的一部分点移动到画布以外,然后将新接收的点显示在画布上,这样,当所有点都接收到时,画布上不能显示两个波形的形状,只能显示目前在画布上的一部分点。),正是由于这个原因,所以没有选择该控件。

还想再问一下,我需要画的点很多,如果每次都要将所有的点重画一次,肯定比较慢,另外,也需要定义一个非常大的数组,这样占用内存也比较大,所以我想问一下,如何把已经画好的点绘制成一个图片呢?又如何把图片COPY到画布上呢?请再次给予指点,谢谢。

好吧。我也没有实际做过,不过你要做,就试试吧。

肯先,你要参考帮助文档
C:\QNX630\target\qnx6\usr\help\product\photon\prog_guide\draw.html
http://www.qnx.com/developers/docs/6.3.2/photon/prog_guide/draw.html
会帮你理清思路。
然后在Images这一小段有讲到,使用PhCreateImage()来创建Image,返回一个PhImage_t结构。然后,你要做的大多数事情,就是改结构里的
char *image --The image pixel data了。
如最简单Image types: Pg_BITMAP_TRANSPARENT
A monochrome image with transparent regions. The bits in the image data that are set to 1 are drawn using color palette entry 1; zeros are treated as transparent, so they’re not drawn.

这个做的时候有问题再讨论。

有了Image,画上去用PgDrawImage就可以了。函数说明里有例子。相信不是问题。