VS2005 C# wince下画图问题

Super龍卷風 2013-02-05 03:58:10
刚刚接触C#,算是新手一个。
现在的规划是,我用pictureBox1将UART所获数据实时的显示出来。
但在实现中,发现picturebox1只能显示当前所画line,而之前的画线全部消失了。
放上我正在用的代码,大家帮忙看看吧:
paint函数:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
int i, j, k;
Graphics g = e.Graphics;
Pen mypen = new Pen(Color.Yellow);
g.DrawLine(mypen, tempx_pre, tempy_pre, tempx, tempy);
}

我用了一个15ms的timer来模拟获得的UART数据:

private void timer1_Tick(object sender, EventArgs e)
{
pictureBox1.Refresh();//刷新
//下面是模拟UART获得的数值tempx,tempy。
tempx_pre = tempx;
if (tempx < 440)
{
tempx += 1;
}
else
{
tempx = 0;
}

tempy_pre = tempy;
if (tempy < 270)
{
tempy += 1;
}
else
{
tempy = 0;
}
}

大家看看有什么问题好么?怎么才能把之前画的也同时保留在屏上,而且不闪烁。
...全文
193 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lllanm 2013-02-05
  • 打赏
  • 举报
回复
包一层控件 在控件里面画比较好 比如 一个form里面包一个label 在label里进行绘制 每次刷新 只刷新外面的form, 利用刷新本身的性能 延迟刷新 对于双缓冲,我也做过(先画位图 再画面), 也很容易出现这个问题。如果你可以让画画面慢一点就应该可以解决闪烁的问题。 对于高性能的刷新,可以再讨论,必须使用到C++的gdi的知识。
Super龍卷風 2013-02-05
  • 打赏
  • 举报
回复
引用 15 楼 gxingmin 的回复:
类似这样的,你再改改 C# code ? 1234567891011 Bitmap dst =new Bitmap((int)rct.Width, (int)rct.Height, pf); g = Graphics.FromImage(dst); g.Clear(bkColor); g.……
That's great! Thanks. I will try.
gxingmin 2013-02-05
  • 打赏
  • 举报
回复
类似这样的,你再改改
Bitmap dst =new Bitmap((int)rct.Width, (int)rct.Height, pf);
             g = Graphics.FromImage(dst);
             g.Clear(bkColor);
             g.TranslateTransform(-rct.X, -rct.Y);
             g.RotateTransform(angle);
             g.InterpolationMode = InterpolationMode.HighQualityBilinear;
             g.DrawLine(...);
             g.Dispose();

       
pictureBox1.Images=dst;
Super龍卷風 2013-02-05
  • 打赏
  • 举报
回复
引用 11 楼 wangwei244157887 的回复:
引用 8 楼 tornadofeng 的回复: 引用 4 楼 gxingmin 的回复:所有语言都这样 Refresh都会清除画板 闪烁这个用双缓存绘制,或者你干脆别Picturebox1.Reresh(),你在bitmap上绘制,绘好后作为背景图片显示在picturebox上得了 1.我看了一下,wince下不支持双缓存。 2.如果我不用Picturebox,而用bitmap,这倒……
那就多谢了,请发到我的邮箱: tornadofeng@163.com 烂代码只是对于会的人,对于我这样的新人,就是好东西了。再次感谢
gyzsky 2013-02-05
  • 打赏
  • 举报
回复
PictureBox pictureBoxDraw=new PictureBox(); Bitmap image = new Bitmap(pictureBoxDraw.Width, pictureBoxDraw.Height); pictureBoxDraw.Image = image; Graphics g = Graphics.FromImage(pictureBoxDraw.Image); 用这个Graphics对象g画图,然后每个图形数据保存下来,需要刷新时候刷新,可以减少闪烁,希望对你有帮助。
Super龍卷風 2013-02-05
  • 打赏
  • 举报
回复
引用 4 楼 gxingmin 的回复:
所有语言都这样 Refresh都会清除画板 闪烁这个用双缓存绘制,或者你干脆别Picturebox1.Reresh(),你在bitmap上绘制,绘好后作为背景图片显示在picturebox上得了
再确认一下你说的这个所有语言都一样,是不是指的是Wince下啊?
「已注销」 2013-02-05
  • 打赏
  • 举报
回复
引用 8 楼 tornadofeng 的回复:
引用 4 楼 gxingmin 的回复:所有语言都这样 Refresh都会清除画板 闪烁这个用双缓存绘制,或者你干脆别Picturebox1.Reresh(),你在bitmap上绘制,绘好后作为背景图片显示在picturebox上得了 1.我看了一下,wince下不支持双缓存。 2.如果我不用Picturebox,而用bitmap,这倒是个好方法。能给个例子试……
你可以留个邮箱,我写了一个烂代码,和你的要求差不多,如果你不介意烂的话,可以发给你,呵呵
Super龍卷風 2013-02-05
  • 打赏
  • 举报
回复
引用 7 楼 gxingmin 的回复:
引用 5 楼 tornadofeng 的回复: 另外,如果我要在一个picturebox里面画2~4条不同颜色的曲线是否可以? 可以,画n条m种颜色也没问题
Thanks. 终于听到一个好消息了。呵呵。。谢谢 对于Wince下的编程,我还是太不了解了。。
Super龍卷風 2013-02-05
  • 打赏
  • 举报
回复
引用 6 楼 hws1058648831a 的回复:
消除闪烁可以用双缓存啊
wince下无法打开双缓存。。。。我也看过这个了。。。
Super龍卷風 2013-02-05
  • 打赏
  • 举报
回复
引用 4 楼 gxingmin 的回复:
所有语言都这样 Refresh都会清除画板 闪烁这个用双缓存绘制,或者你干脆别Picturebox1.Reresh(),你在bitmap上绘制,绘好后作为背景图片显示在picturebox上得了
1.我看了一下,wince下不支持双缓存。 2.如果我不用Picturebox,而用bitmap,这倒是个好方法。能给个例子试试么?new bitmap?
gxingmin 2013-02-05
  • 打赏
  • 举报
回复
引用 5 楼 tornadofeng 的回复:
另外,如果我要在一个picturebox里面画2~4条不同颜色的曲线是否可以?
可以,画n条m种颜色也没问题
gyzsky 2013-02-05
  • 打赏
  • 举报
回复
消除闪烁可以用双缓存啊
Super龍卷風 2013-02-05
  • 打赏
  • 举报
回复
另外,如果我要在一个picturebox里面画2~4条不同颜色的曲线是否可以?
gxingmin 2013-02-05
  • 打赏
  • 举报
回复
所有语言都这样 Refresh都会清除画板 闪烁这个用双缓存绘制,或者你干脆别Picturebox1.Reresh(),你在bitmap上绘制,绘好后作为背景图片显示在picturebox上得了
Super龍卷風 2013-02-05
  • 打赏
  • 举报
回复
多谢楼上两位,看来这样是没办法了。。。不知道wince下其它的语言是不是都这样啊?比如VB.net 那如何消除闪烁呢?有什么好办法么?
gxingmin 2013-02-05
  • 打赏
  • 举报
回复
pictureBox1.Refresh();//刷新 执行这句话后,画板会全部清空,再重新绘制 所以你每次都相当于只绘了一条线 你应该把你所有线的坐标记录起来,在Paint事件里再把所有线条都绘出来
「已注销」 2013-02-05
  • 打赏
  • 举报
回复
这没办法,你只能把前面的画的数据存储起来,当刷新的时候,一起连带画吧

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧