Graphics问题

wolf_life 2008-09-04 11:20:48

我想用它画一个钟表,在每次秒针移动时把前一秒画的秒针线给去除。。这个怎么做啊。。。。
搞了好半天。。。。没找到好的方法。
...全文
209 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
TengGaoqing 2008-09-04
  • 打赏
  • 举报
回复
写一个clear的方法,来clear掉上一条线,然后再重新把当前这条线给画出来。
如果还不知道的话,那么你把你的代码给大家伙看看。
优途科技 2008-09-04
  • 打赏
  • 举报
回复
GDI就可以实现啊。每秒绘制一次。刷新一次。
卧_槽 2008-09-04
  • 打赏
  • 举报
回复
重画钟面
  • 打赏
  • 举报
回复
记住位置。用背景色填充一下不行?
yatobiaf 2008-09-04
  • 打赏
  • 举报
回复
还有一种办法,就是用一个不规则窗体来绘制,每秒钟都改变这个不规则窗体的形状(region).
yatobiaf 2008-09-04
  • 打赏
  • 举报
回复
我还以为是在一个窗口里画呢,原来是直接在桌面上画,这个刷新就不是很好弄了,要用到windows API,像InvalidateRect或者UpdateWindow之类的刷新桌面句柄.
LorenLiu 2008-09-04
  • 打赏
  • 举报
回复
如果是我做的话,我会这么做
1. 设置Form的BorderStyle为None,TransparencyKey为BackColor的颜色(一般是Control),给Form一个成员变量Image,赋值给它一个外部的PNG图片,图片是透明底色,上面一圈写着1到12共12个数字
2. 在Form里设置一个Timer成员变量,每1秒钟tick一次,在tick的时候做this.Invalidate();(刷新Form)
3. override Form的Onpaint方法,做两件事,第一是画背景,调用e.Graphics.DrawImage(mImage, this.ClientRectangle);第二是画时针,根据DateTime.Now得到当前的小时,分和秒,分别算出三条线的起始和终止点,调用e.Graphics.DrawLine()方法就可以了
wolf_life 2008-09-04
  • 打赏
  • 举报
回复
不是。。。谢谢。。。不知道有没有更好的放。。
我现在整了个这样的解决方案。。。。

俺分来,,用两种颜色标识秒针,,这样后面的图还在,但也能实时的看到秒针在动。。哈哈

希望大家给个更好的技术解决方案。。哈哈
TengGaoqing 2008-09-04
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 wolf_life 的回复:]
17楼。。你说的是,,,我没有好好设计,,我的最初目的就是在我的桌面上画一个表,,感兴趣而已,,哈哈。。

我想要的是透明的,,不会挡住我的桌面文件,,


C# code
[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr hWnd);
deskHandle = GetDC(IntPtr.Zero); //NULL

gh = Graphics.FromHdc(deskHandle);



通过上面的代码取得左面的画图类。。然后…
[/Quote]
那现在的问题就是怎么去做你的透明咯。
结帖吧!
LorenLiu 2008-09-04
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 wolf_life 的回复:]
上面是和16说的。。。打错了。。

17楼兄弟,,1秒的间隔让我看不到表了。。哈哈
[/Quote]

哦~~我以为你的表的背景是在Form的Onpaint里做的呢~~
wolf_life 2008-09-04
  • 打赏
  • 举报
回复
上面是和16说的。。。打错了。。

17楼兄弟,,1秒的间隔让我看不到表了。。哈哈
wolf_life 2008-09-04
  • 打赏
  • 举报
回复
17楼。。你说的是,,,我没有好好设计,,我的最初目的就是在我的桌面上画一个表,,感兴趣而已,,哈哈。。

我想要的是透明的,,不会挡住我的桌面文件,,


[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr hWnd);
deskHandle = GetDC(IntPtr.Zero); //NULL

gh = Graphics.FromHdc(deskHandle);


通过上面的代码取得左面的画图类。。然后画图的。。


yatobiaf 2008-09-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 TengGaoqing 的回复:]
有两种方法:
第一:
条件:你画的线的颜色是你的线所在的背景的反色。
解决方法:
取得你的线上每一个pixel的rgb值,然后取反,在上面再画一条线。
第二:
条件:你是以某一个image做为背景,同时你画的线是在一个透明的image上画的。
解决方案:
把透明的image给全部清除,然后再画你当前的线。

如果是别的话,很难去只去重画一条线。
[/Quote]

完全不需要这么麻烦,17楼的代码比较接近了.唯一的缺陷是他不能控制重画的时间.我马上给你写个例子.很简单的.
LorenLiu 2008-09-04
  • 打赏
  • 举报
回复
这样行不?

private void timer1_Tick(object sender, EventArgs e)
{


PaintLine();
}

int x1 = 100;
int y1 = 100;
int x2 = 200;
int y2 = 200;
private void PaintLine()
{
gh = this.CreateGraphics();

gh.DrawLine(Pens.Blue, new Point(x1 += 10, y1 += 10), new Point(x2 += 10, y2 += 10));

this.Invalidate();
}
TengGaoqing 2008-09-04
  • 打赏
  • 举报
回复
所以说,你当时的设计就存在问题。
你要把你的表设置为两层的东西,最底层是你的背景,上面是一个透明的纸。
你就可以在纸上画东西了,怎么画都可以。
当然你要是想再弄的好一点的话,你要知道你在什么地方设置为一个透明的。
比如说你的表针会经过的地方,其它的地方都是不透明的。
这样就可以了。
wolf_life 2008-09-04
  • 打赏
  • 举报
回复
private void clear()
{
gh.DrawLine(new pen(backColor), new Point(x1 , y1 ), new Point(x2 , y2));
}



是这么说的。。但问题是我要把他放到桌面上桌面的背景色是会变得。。还有取背景色吗?
TengGaoqing 2008-09-04
  • 打赏
  • 举报
回复
private void clear()
{
gh.DrawLine(new pen(backColor), new Point(x1 , y1 ), new Point(x2 , y2));
}
TengGaoqing 2008-09-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wolf_life 的回复:]
大家说的都不行。。。。

4楼说的写一个clear方法,怎么写啊。。我想知道的就是怎么样去掉上一条线。
private void timer1_Tick(object sender, EventArgs e)
{


PaintLine();
}

int x1 = 100;
int y1 = 100;
int x2 = 200;
int y2 = 200;
private void PaintLine()
{
gh = this.CreateGraphics();

[/Quote]
TengGaoqing 2008-09-04
  • 打赏
  • 举报
回复
有两种方法:
第一:
条件:你画的线的颜色是你的线所在的背景的反色。
解决方法:
取得你的线上每一个pixel的rgb值,然后取反,在上面再画一条线。
第二:
条件:你是以某一个image做为背景,同时你画的线是在一个透明的image上画的。
解决方案:
把透明的image给全部清除,然后再画你当前的线。

如果是别的话,很难去只去重画一条线。
wolf_life 2008-09-04
  • 打赏
  • 举报
回复
我顶。。。期待解决中。。。。
加载更多回复(6)
同步电机与构网型变流器的频率稳定性研究(Simulink仿真、Matlab代码)内容概要:本文围绕“同步电机与构网型变流器的频率稳定性研究”展开,结合Simulink仿真与Matlab代码实现,深入探讨了同步电机与构网型变流器在电力系统频率稳定中的动态交互机制。研究重点包括构网型变流器(Grid-Forming Inverter, GFM)如何模拟同步电机的惯量与阻尼特性,提升低惯量系统的稳定性,并通过仿真模型对比分析两者在频率响应、暂态稳定性及系统惯量支撑方面的性能差异。文中提供了完整的建模仿真代码,涵盖控制策略设计、小信号建模、稳定性分析等内容,适用于科研复现与教学实践。; 适合人群:具备电力系统分析、自动控制理论基础,熟悉Matlab/Simulink仿真环境,从事新能源并网、电力电子与电网稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于理解构网型变流器如何替代或补充传统同步电机的频率调节功能;②支撑科研论文复现、课程项目设计或实际工程中对高比例新能源系统稳定性的分析与优化;③掌握Simulink搭建电力系统动态模型与Matlab进行稳定性分析的核心方法。; 阅读建议:建议读者结合文中提供的仿真模型与代码逐步操作,重点关注控制参数设置对系统稳定性的影响,同时参考相关文献深化对构网控制策略的理解,以实现从理论到仿真的完整闭环。
【复现】并_离网风光互补制氢合成氨系统容量-调度优化分析【Cplex求解】(Matlab代码实现)内容概要:本文围绕“并_离网风光互补制氢合成氨系统”的容量配置与调度优化问题展开研究,利用Cplex求解器在Matlab环境中实现优化模型的构建与求解。研究整合风能、光伏等可再生能源,通过电解水制氢并进一步合成氨,形成绿色能源转化与储存路径。重点解决系统在并网与离网两种运行模式下的容量规划与运行调度协同优化问题,考虑风光出力不确定性、设备效率、能量平衡及经济性等多重约束,旨在提升系统能源利用率与经济性。文中提供了完整的Matlab代码实现,便于科研人员复现和改进相关模型。; 适合人群:具备一定电力系统、可再生能源或优化建模背景的研究生、科研人员及工程技术人员,熟悉Matlab编程与数学优化方法者更佳。; 使用场景及目标:①用于风光储氢氨多能互补系统的容量规划与运行调度研究;②支撑科研论文复现、毕业课题设计或实际项目前期仿真分析;③掌握Cplex在能源系统优化中的应用方法,提升复杂系统建模能力。; 阅读建议:建议结合文中提供的Matlab代码与优化模型公式同步阅读,重点关注目标函数构建、约束条件设置及Cplex调用流程,可尝试修改参数或引入新约束进行扩展研究,以深化对多能系统协同优化的理解。
内容概要:本文介绍了一个基于Python开发的“PDF产品彩页批量转换成图片并插入Word”的多线程工具,能够高效地将指定文件夹内的多个PDF文件批量转换为高清图像,并自动插入到一个Word文档中,生成图文并茂的产品彩页合集。该工具采用PyMuPDF(fitz)、Pillow、python-docx等库实现PDF转图与文档生成,利用ThreadPoolExecutor实现智能多线程处理,根据CPU核心数和PDF数量动态分配线程,提升处理效率。界面使用Tkinter构建,支持选择PDF文件夹、设置输出路径、选择图像质量(标准/高/超清),并具备日志记录、进度条显示、错误提示等功能。转换后的Word文档无任何页码或页眉页脚干扰,包含自动生成的目录和处理摘要,图片自适应页面宽度,排版整洁美观。; 适合人群:具备一定Python编程基础的技术人员、办公自动化需求者、需要批量处理PDF与Word文档的企业用户或个体工作者;尤其适用于市场、设计、行政等岗位人员。; 使用场景及目标:①将多个产品手册PDF整合为一份可编辑的Word图文文档;②实现办公流程自动化,提高大批量文件处理效率;③避免手动截图粘贴的繁琐操作,确保输出格式统一、清晰无水印;④利用多线程技术缩短处理时间,提升用户体验。; 阅读建议:使用前需安装所需依赖库(PyMuPDF、Pillow、python-docx),建议在性能较好的设备上运行以充分发挥多线程优势;可通过修改源码进一步定制输出样式或增加功能(如水印添加、格式导出等),适合用于学习GUI编程、多线程应用及文档自动化处理的实践项目。

111,120

社区成员

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

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

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