WinFormCanvasDemo icon indicating copy to clipboard operation
WinFormCanvasDemo copied to clipboard

当Zoom等于MaxZoom时在图的最右边放到最大后,图会偏出绘板。

Open dzhydaniel opened this issue 2 years ago • 14 comments

    //缩放比例
    public float Zoom = 10;

    //最小比例
    private float MinZoom = 0.02f;
    //最大比例
    private float MaxZoom = 50;

image

dzhydaniel avatar Feb 07 '23 05:02 dzhydaniel

放到最大的时候,浮点数与整数转换上存在一定的误差,导致目前放大太多会造成图像漂移问题

TimChen44 avatar Feb 21 '23 04:02 TimChen44

放到最大的时候,浮点数与整数转换上存在一定的误差,导致目前放大太多会造成图像漂移问题

大概得怎么解决呢,请指点一下

dzhydaniel avatar Feb 24 '23 05:02 dzhydaniel

1、限制错放比例 2、把单精度float全部改成双精度double 3、所有原始尺寸增加十倍,减缓坐标系转换到屏幕像素时,小于1的问题

TimChen44 avatar Mar 12 '23 01:03 TimChen44

试了限制最大放大比例 //最大比例 private float MaxZoom = 20f; 现在在图形上放大到最大后不会突然消失了 非常感谢

dzhydaniel avatar Mar 15 '23 05:03 dzhydaniel

无标题

image

这个图里有40万个元素,我需要找到其中的一个并定位。循环周期100ms. 当频繁使用mapCanvas.Invalidate();时CPU占用率一度达到40% ,想请教一下,能不能不调用或者少调用mapCanvas.Invalidate(); 让CPU的使用率降低。

dzhydaniel avatar Mar 21 '23 08:03 dzhydaniel

还有个问题就是,怎么能让绘制出来的方块图形和canvas中心对齐?

dzhydaniel avatar Mar 22 '23 08:03 dzhydaniel

40万个元素?有点出乎意料了。 你那个mapCanvas.Invalidate();干了什么事情? canvas没有中心,只是一个坐标系,如果是屏幕中心,那么应该用viewer的坐标去算

TimChen44 avatar Mar 25 '23 01:03 TimChen44

mapCanvas.Invalidate(); 为了重新绘制。没有其他目的。

dzhydaniel avatar Mar 28 '23 00:03 dzhydaniel

你把重新放到循环外面呢

TimChen44 avatar Apr 06 '23 12:04 TimChen44

40万个元素用鼠标拖动平移的时候会有卡顿

dzhydaniel avatar Jun 10 '23 01:06 dzhydaniel

你把重新放到循环外面呢

经过测试发现如果不同时频繁的绘制40万个元素 CPU占用率就会显著下降,所以我在想有没有什么办法做一个缩略图,只显示当前更新的元素的周围的元素

dzhydaniel avatar Jun 13 '23 02:06 dzhydaniel

你把重新放到循环外面呢

经过测试发现如果不同时频繁的绘制40万个元素 CPU占用率就会显著下降,所以我在想有没有什么办法做一个缩略图,只显示当前更新的元素的周围的元素

如果只更新小图的话CPU占用率很低,但是大图也要更新,所以有没有办法局部更新大图。

dzhydaniel avatar Jun 26 '23 02:06 dzhydaniel

你把重新放到循环外面呢

经过测试发现如果不同时频繁的绘制40万个元素 CPU占用率就会显著下降,所以我在想有没有什么办法做一个缩略图,只显示当前更新的元素的周围的元素

如果只更新小图的话CPU占用率很低,但是大图也要更新,所以有没有办法局部更新大图。

https://github.com/TimChen44/WinFormCanvasDemo/assets/44791363/ee42e419-f1e8-486a-b088-33eaea5f6154

dzhydaniel avatar Jun 26 '23 02:06 dzhydaniel

无标题

image

这个图里有40万个元素,我需要找到其中的一个并定位。循环周期100ms. 当频繁使用mapCanvas.Invalidate();时CPU占用率一度达到40% ,想请教一下,能不能不调用或者少调用mapCanvas.Invalidate(); 让CPU的使用率降低。

这个解决了吗,有什么办法吗

food4321 avatar Sep 27 '24 23:09 food4321