聊天讨论 求教关于画板的一些功能实现

vicedev · 2022年11月21日 · 最后由 vicedev 回复于 2024年01月23日 · 775 次阅读

求教关于画板的一些功能实现 1.填色功能,网上找了一些填色算法,在填色区域比较大的时候(几千✖️几千),会有比较明显的耗时,但是在商店里找了一些 App,填色效率非常高,根本感觉不出来,不知道怎么实现的 2.回退功能,想到的两种方案,一种是每次回退都从头画一遍,明显效率不高,特别是有一些耗时操作的时候。第二种是存储每一次画完后的整个 bitmap,这种问题是画板分辨率比较大的时候内存根本不够,缓存到磁盘的话一个分辨率大的图片可能几十 m,缓存时间也很长,根本没有用户操作的快 3.图层,我的理解一个图层就是一个 bitmap,那图层多的时候不是就有一大堆 bitmap,内存扛得住吗,但是看那些 app 都可以建一堆图层,似乎并没有影响

实在没想到好的解决方式,有大佬了解吗

我做的是 Android,思想应该各个平台通用吧

记录过程

z.houbin 回复

看过这个,他的回退方案就是完全重新画的,而且没啥耗时的操作,所以没啥帮助

先把生成的 bitmap 压缩成 png 或 jpg 存到内存或磁盘,用的时候再解压,试试行吗?

我在做网页的绘板,前期没有特别复杂的笔刷绘图逻辑时用的是完全重画,加了纹理笔刷等复杂绘图逻辑之后是在能被十除整后还能留余的位置做画面缓存,这样撤销的时候只需要在画面缓存基础上重绘最后没有被缓存的十步或更少

Xiang 回复

这个就是第二点提到的,画布比较大的时候可能需要缓存几十 M 大小的图片,缓存速度跟不上用户的操作速度

itorr 回复

嗯嗯,这种方案有想过,也就是最大就会绘制十步操作,但是对于填色操作,一次填色就很耗时的时候,就算只画 10 步还是很耗时。后来想了下,感觉只能去优化填色操作的耗时

vicedev 回复

填色的效率这个问题我也很困扰,请问最后有找到什么好用的高效率填色算法 或者 有找到什么好的填色工具流程设计么

itorr 回复

抱歉现在才看到,搜了半圈填色算法,什么四联通,八联通,最后用的是扫描线填色算法,速度上已经可以接受了,不过还是达不到别的 app 那种填色速度。 话说原来你是那个电子包浆工具的作者哈哈,用过你这工具,很有趣。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号