[就这么点分了]关于winform控件覆盖后部分控件重绘或者WPF可用的图片显示技术问题

cheersfortwd 2020-12-02 10:16:15
大佬们好
小弟工作需求,用Winform写了一个控件,继承自panel,在他的onpaint方法中重绘显示图片,图片会很长(线扫相机),到15K*40K的样子,然后我需要在图片上做绘图(调整大小,平移等,均实现)
问题:每次调整上层绘图都需要重绘整个panel,当显示图片较大时,显示很慢很慢,这导致调整上层绘图的内容时也很卡
然后想着跟WPF一样,上面覆盖一层别的控件,设置为透明来执行绘图,下层只显示图片,然后我就裂开了
不管通过通过任何方式重绘上层覆盖的控件,整个区域都会刷新,然后底层的图片层依旧会重绘
想了下,尝试了
1 挂起下层控件特定时候聪慧:调用control.SuspendLayout();无用
2 拦截消息SendMessage(pbxImage.Handle, WM_SETREDRAW, 0, IntPtr.Zero);无用

想问问各路大姥姥们,有没有什么想法可以探索

之所以非要使用winform,是因为图像要显示为位图,即放大后要能看到清晰度灰度,WPF没找打有什么方法可以实现这种绘制













可用20分全部奉上;(虽然大佬也不在乎
...全文
2585 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ziqi0716 2020-12-03
  • 打赏
  • 举报
回复
引用 2 楼 cheersfortwd 的回复:
[quote=引用 1 楼 ziqi0716 的回复:]6亿像素的图片?那直接加载肯定卡! 解决办法:金字塔切片,参考百度地图等.
目前没有做过多操作,直接从内存截取一部分生产新的bitmap来显示,现实问题是还好,毕竟也不会不停的拖动,现在就是绘制,是否有不重绘下层图片只重绘上层显示的方法[/quote] 你既然有缩放等操作,肯定会发生重绘的,还是切片吧. 要是仅仅加载一次,而且速度能接受,那你可以单独叠加个透明图片控件,让用户在上面涂涂画画之类的.
  • 打赏
  • 举报
回复
你自己开发一个 MyImage 控件,传给它一个 Image 对象,它自动把图片切成256x256的切片然后逐一放在窗口用户区界面上的准确坐标位置,凡是肉眼不可见的瓦片就跳过不贴。这种编码多说1小时,快则十分钟,这种的东西用不着纠结什么 onpaint 那种成事不足败事有余的底层编码。
  • 打赏
  • 举报
回复
如果不是专门给微软等大公司开发大量控件的专业技术公司,不要动不动就“重绘”。滥用 onpaint 很尴尬。如果你就是一个普通的 Image控件,几个普通的“点、线、多边形”控件(来自 vb 图形库),你自己不写什么 onpaint,人家控件也不会动不动就重绘。

另外从架构上说,不但是不要胡乱深入到不该自己干预的层面去“开发”,同时也而应该把精力放到真正的应该的设计上。例如你都花那么多多精力去搞底层控件了,动态自动展示切片布局(肉眼不可见的切片根本不显示)怎么就不开发呢?用不了一个小时工作量的开发,主要检验的是真正的设计,而不是去搞底层。
xuzuning 2020-12-02
  • 打赏
  • 举报
回复
多弄几个bmp不就弄出层次来了?
cheersfortwd 2020-12-02
  • 打赏
  • 举报
回复
引用 1 楼 ziqi0716 的回复:
6亿像素的图片?那直接加载肯定卡! 解决办法:金字塔切片,参考百度地图等.
目前没有做过多操作,直接从内存截取一部分生产新的bitmap来显示,现实问题是还好,毕竟也不会不停的拖动,现在就是绘制,是否有不重绘下层图片只重绘上层显示的方法
ziqi0716 2020-12-02
  • 打赏
  • 举报
回复
6亿像素的图片?那直接加载肯定卡! 解决办法:金字塔切片,参考百度地图等.

111,098

社区成员

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

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

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