求大神:vb.net中在有背景图的情况下如何提高透明图片的切换速度

hw19900825 2013-10-28 03:59:57
情况:在一张地图上有多个交叉口(大概100个),要在上面显示红绿灯图片(图片为正方形,中间是红或绿的圆,圆以外区域透明),现要求每秒变换一次图片颜色。版本:.net framework 3.5
采用方法:将图片放入label(picturebox也试过)控件中,每秒切换一次
遇到问题:图片切换速度很慢,所有红绿灯不是同时变换,而是一个接一个的往下变,渐变效果非常明显
预计原因(猜测):图片在变换时为了显示图片的透明部分会去读背景图,然后将背景图那块显示在透明部分。将背景图去掉后,变换速度很快,几乎同时
求教:现在背景图是肯定要的,红绿灯图片可以自己作,图片四周不透明的话会盖住背景图上的道路,求怎样才能让所有图片几乎同时变动啊,求大神指教啊
...全文
275 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hw19900825 2013-10-30
  • 打赏
  • 举报
回复
引用 5 楼 u012592437 的回复:
其实,我不太赞同直接绘制底图后再上面绘制红绿灯。另外,你说周边粗糙很可能不仅仅是绘图质量,而是多次变换状态后一遍一遍绘制红绿灯(而从未“擦出”)导致多个图片边缘叠加在一起,alpha融合效果已经没有了,得到一个粗糙的黑边。 一个简单的办法是,你在内存里创建一个位图,先把地图对应位置的矩形范围绘制上,再绘制上红灯,于是得到了一个不透明的红灯(底图是动态生成的底图对应位置图片),同样绘制绿灯。仍然使用两个image控件进行切换。 再进一步,你可以对底图先自动切片,然后拼接绘制到一起。这样动态生成带有地图底图的不透明红绿灯会更快。
这种方法对于图片的切换确实有效,但每个红绿灯的背景不一样(道路的方向和大小),现在画红绿灯(或添加控件)是通过坐标点来进行绘制,这样不透明图片和它在图片上的位置会很难对应起来。总的而言,还是谢谢你了。
hw19900825 2013-10-30
  • 打赏
  • 举报
回复
回复3楼:谢谢,确实圆了不少 回复4楼:WPF完全不会,重学的话太花估计回花不少时间,划不来
capricciosoft 2013-10-29
  • 打赏
  • 举报
回复
其实,我不太赞同直接绘制底图后再上面绘制红绿灯。另外,你说周边粗糙很可能不仅仅是绘图质量,而是多次变换状态后一遍一遍绘制红绿灯(而从未“擦出”)导致多个图片边缘叠加在一起,alpha融合效果已经没有了,得到一个粗糙的黑边。 一个简单的办法是,你在内存里创建一个位图,先把地图对应位置的矩形范围绘制上,再绘制上红灯,于是得到了一个不透明的红灯(底图是动态生成的底图对应位置图片),同样绘制绿灯。仍然使用两个image控件进行切换。 再进一步,你可以对底图先自动切片,然后拼接绘制到一起。这样动态生成带有地图底图的不透明红绿灯会更快。
  • 打赏
  • 举报
回复
重复一遍吧! 不要使用winform,不要以什么GDI+为新奇。 使用WPF进行开发!
capricciosoft 2013-10-29
  • 打赏
  • 举报
回复
提高绘图质量 Graphics.SmoothingMode = SmoothingModeHighQuality
hw19900825 2013-10-29
  • 打赏
  • 举报
回复
引用 1 楼 dylike 的回复:
把这些东西全部画在地图上
谢谢,现在已经使用这种方法了,但感觉画出来的圆有点粗糙,有的地方不够圆。 我是用 bp = New Bitmap(1920, 1080) g = Graphics.FromImage(bp) rec= New Rectangle(x, y, 20, 20) g.FillPie(redBrush, rec, 0, 360) 有什么方法能让圆的周围更圆滑,精度更高啊
dylike 2013-10-29
  • 打赏
  • 举报
回复
把这些东西全部画在地图上

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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