如何用c# winform GDI+ 的方式实现不闪烁的高速实时波形图?

实现方法没问题,解决闪烁我知道的就两个办法
双缓冲
this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
this.UpdateStyles();
还有就是局部刷新
Rectangle rect = new Rectangle(new Point(0,0),new Size(50,50));
this.Invalidate(rect);
这两句可以加在属性里,表明只是刷新从坐标(0,0)开始的大小为50,50的区域

不过感觉数据每次都是变化的,,这样做,可能之前画的波形不会被覆盖.

尽可能的缩小波形图的大小,并且延长sleep间隔

比如系统里的进程管理器,迅雷的流量监视,他们的间隔都是1秒.
这对一般用户就已经可以接受了.

用C#.net的GDI+画图,如何实现图像的旋转,比如直线,矩形,椭圆等等,用RotateTransform或者不用都可以~

画“直线,矩形,椭圆”这个是怎么画的???c#.net GDI+里面有相应的函数,那旋转是一样的,你画直线时,需要提供参数,画矩形时也需要提供参数,旋转只不过是参数变量变了而已。求出变量就可以了!

使用GDI是可以实现的,我只说下思路吧,代码自己写吧:
图中效果可以使用Form+图片来实现,其中图片为GDI绘制完后赋值到Form中的,Form可以将背景设置为透明色,只显示图片,许多游戏登陆界面的不规则窗体都是这么做的。
图片的绘制思路:
边框圆边:可以截图后用PS扣出边框以内的圆形图片保存为png格式,背景颜色为空,也就是除了圆以外的地方(图片为矩形)都没有背景色。
中间人物图标:直接抠图
扇形进度条:用GDI里的Graphics.DrawPie(参数……),里面有设置开始角度和结束角度的参数,按你需求设置将圆分为多少份儿(360°),没增加一个进度格(如果分为360份)绘制一个DrawPie并增加一度的开始角度和结束角度,并设置填充颜色。
绘制流程:先DrawImage()绘制圆形边框->绘制DrawPie()->最后绘制人物图片
最后将绘制的图片赋值到form窗体的控件中,将Form窗体控件背景色设为透明色,隐藏窗体标题栏FormBorderStyle设置
具体怎么设置背景透明百度下就有
希望帮到你

#17161911001# 在winform中用C#编程实现菜单栏中的各种功能该怎么编代码啊?我只知道怎么关闭,像打开,保存,工具栏都不 ******
#那环# 什么也不说了,直接代码: 打开: OpenFileDialog open = new OpenFileDialog(); open.Filter = "All File(*)|*.*"; open.Title = "打开"; if (open.ShowDialog() == DialogResult.OK) { //这里处理打开文件后代码 } open.Dispose(); 保存: ...

#17161911001# 如何用C#在WINFORM中,制作自定义的流程图或者是工作流 - ******
#那环# 应该很好做啊,最重要是对象层次结构的设计,这个问题要回答要用太多文字了.只能简单陈述了: 1.FlowChartDocument类,负责整个图形的载入,保存,显示,放大和缩小等等 2.FlowChartDocument类使用XML来存储整个图形; 3....

#17161911001# C#如何制作winform动态曲线图 - ******
#那环# 下个微软的chart控件,装好后引到程序中,属性里面设置,就和datagrid差不多,看看就会了

#17161911001# 如何使用C#编写获取机器人坐标的winform程序 - ******
#那环# private void Form1_Move(object sender, EventArgs e) { this.label1.Text = this.Location.X.ToString() + "," + this.Location.Y.ToString(); } 注意:Form1是窗体类名,label1是Form1窗体里面的一个Label控件,注意这个事件是Move事件,也就是窗口移动事件

#17161911001# winform运行中怎么用C# 代码调整窗口位置,特别是怎么居中到屏幕中央??? 设置属性 StartPosion 不行 - ******
#那环# 获取当前屏幕分辨率->获取当前窗口大小->计算如果居中的话当前窗口的位置->给当前窗口位置赋值 方法挺笨的,不过可以实现,代码如下,测试通过. int height = System.Windows.Forms.SystemInformation.WorkingArea.Height; int width = ...

#17161911001# c# winform 怎么执行外部命令 - ******
#那环# 给个方法你!这个是一个CMD的ping命令,然后返回命令的字符串 public static string CmdPing(string strIp) { System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.FileName = "cmd.exe"; p.StartInfo.UseShellExecute =...

#17161911001# c#winform 扩展怎么使用 - ******
#那环# 为了在应用程序中使用组件,必须首先添加对组件的引用. Visual Studio 在“添加引用”对话框中提供了五个选项: “.NET”:列出可供引用的所有 .NET Framework 组件. “COM”:列出可供引用的所有 COM 组件.

#17161911001# c#控件 winform怎么使用 - ******
#那环# 在buttonA_Click里面加入: buttonB_Click(buttonB,new EventArgs());

#17161911001# 如何用c#winform应用程序调用c++控制台应用程序??? - ******
#那环# // 方法1 System.Diagnostics.Process.Start(@"cpp-console.exe", "/1 /2"); // 立即运行 // 方法2 System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo = new System.Diagnostics.ProcessStartInfo(@"cpp-console.exe", "/1 /2"); process.Start(); // 推迟运行 // 假设cpp-console.exe是你的c++控制台程序,/1 /2是参数

#17161911001# 熟悉C# WinForm程序,了解接口怎么用高手帮我解答一个问题? - ******
#那环# 回答你的问题: 1 接口是一种程序规范,接口中的方法必须要去实现,你的那三个文件与接口没有联系,在写面向对象思想的程序时,在涉及到业务逻辑的类设计之前,一般先进行接口设计,也就是先做好基本的框架,在实施过程中,用类直接...

  • 用C语言编程,如何输入华氏温度和摄氏温度
  • 答:程序如下:include <stdio.h> int main(){ int f;float c;printf("请输入一个华氏温度\n");scanf_s("%d", &f);c = (float)(f - 32) * 5 / 9;printf("它的摄氏温度为:%.2f", c);} 如图:调试通过...

  • 怎样使用C语言列出某个目录下的文件?
  • 答:用C语言列出目录下的文件,在linux下可采用readdir()函数来实现,代码实现过程为:打开目录 循环读目录,输出目录下文件 关闭目录指针 参考代码:include <dirent.h>#include <stdio.h>int main(){ DIR *dirp; s...

  • 在windows下用C语言如何实现socket网络编程,需要用到哪些头文件或者库...
  • 答:需要用到的头文件包含:include <winsock2.h> include <windows.h> 与Linux环境下socket编程相比,windows环境多了一个步骤:启动或者初始化winsock库 Winsock,一种标准API,一种网络编程接口,用于两个或多个应用程序(或...

  • C语言sort函数如何使用
  • 答:C语言中没有预置的sort函数。如果在C语言中,遇到有调用sort函数,就是自定义的一个函数,功能一般用于排序。一、可以编写自己的sort函数。如下函数为将整型数组从小到大排序。void sort(int *a, int l)//a为数组地址,...

  • C语言中如何用 二维数组输出金字塔形或直角三角形数组?
  • 答:include<iostream> include<string> usingnamespacestd;intmain(){ std::cout<<"Inputnum:";intn;std::cin>>n;inta[10][10];for(inti=1;i<=n;++i){ for(intj=1;j<=i;++j)a[i][j]=1;for(intj=i+1;...

  • 如何使用Visual Studio 2010编写一个C语言程序
  • 答:第五步:如下图所示,在左栏中单击【Visual C++】,在中间栏选择【C++文件】,在下面的名称栏里填写C语言程序的名称(注意:不要忘记加上文件的后缀名.c),位置保持默认不变,单击【完成】进入第六步,如图所示。第六...

  • C语言用如何用scanf输入带有空格的字符串
  • 答:要输入带空格的字符串,要用到一个格式字符:%[] --> 一个字符集。“%[]”的作用是扫描字符集合:例如:scanf(“%[^\n]”,str);具体作用是:如果输入的字符属于方括号内字符串中某个字符,那么就提取该字符;如果...

  • 如何用CodeBlocks写c语言程序
  • 答:打开CodeBlocks之后,直接在起始页选择:新建项目(create a new project),或者在文件菜单里面选择 新建 项目(Project)这时会出现新建对话框,选择“控制台应用程序”项,按确定(go)接下来选择是用C还是C++ 点下一步,然后就...

  • 如何使用Visual Studio 2010编写一个C语言程序
  • 答:点击下一步,注意,此时出现的对话框一定要把空项目前面给勾上,单击下一步,单击完成 点击源文件,右击弹出选项,鼠标移动到添加,找到项目,单击进行添加。找到C++文件,单击并命名为123.c,因为是编写C语言,所以一定要加...

  • 用c语言如何编写一个比较两个数大小的程序
  • 答:如何只是比较大小的话,直接一个判断就ok了。代码如下:include <stdio.h> int main(){ int a=0,b=0;scanf("%d %d",&a,&b);if(a>b)printf("%d > %d\n",a,b);else if (a<b)printf("%d < %d\n",...

    为传递更多家电数码信息,若有事情请联系
    数码大全网