1

我正在编写一个移动应用程序(Android),它允许用户使用具有 1 像素精度的单点触控设备“写入”画布。该应用程序将在大约标准 8 1/2" x 11" 尺寸的平板设备上运行。我的策略是将“文本”存储为矢量数据,因为输入设备的每个笔划本质上都是一个矢量,由起点和终点以及一些有助于定义形状的中间点组成矢量(由触摸屏/操作系统在触摸移动时生成)。这应该允许我跟踪笔画的放置顺序(以支持撤消等),并且足够灵活以允许重新调整此文本的大小等,就像任何其他矢量图形一样。

但是,使用高度精确的输入设备和大屏幕进行一些非常粗略的信封背面计算,这样您就可以一对一地模拟标准纸质记事本,这意味着每整页您将有大约 1,700 个笔划文本。在最坏的情况下,计算每个笔划最多可以由约 20-30 个单独的点组成(笔划的每个像素左右一个点),这意味着每页约 50,000 个数据点......对于 SQLite 来说太大了/Android 在重新加载页面并重新创建矢量笔划时处理任何对可靠性的期望(我不得不想象从 SQLite 数据库中提取 50,000 多个结果将超过 CursorWindow的 1Mb 限制

我知道我可以将数据检索分解为多个查询,或者可以修改笔画数据,这样我只添加一个中间点来帮助定义笔画矢量形状,如果它从开始、结束或其他中间像素超过 X 个像素,但我想知道我是否需要从头开始重新考虑这个策略......

有关如何以更有效的方式解决此问题的任何建议?

谢谢!

保罗

4

2 回答 2

0

首先使用矢量数据有什么理由吗?在不知道您的其他要求的情况下,在我看来,您只需将数据存储在光栅/位图中并使用常规压缩方法(例如 PNG/zip/djvu)对其进行压缩(或者如果性能受到影响,则可以使用运行长度编码等简单的方法/RLE)。

编辑:对不起,我没有清楚地阅读这个问题。但是,如果您只需要“撤消”和“调整大小”之类的内容,则可以为每个笔划拍摄位图的快照(当然您只需拍摄更改区域的快照)。

也可以采用混合方法,在等待(真实)矢量图像加载时首先显示快照位图。

此外,我不熟悉 android 游标限制,但 SQL 查询总是可以被重写以将结果分成几部分(通过 LIMIT...OFFSET)。

于 2011-02-06T06:38:51.790 回答
0

我现在正在使用的解决方案,尽管我愿意接受任何进一步的建议!

  1. 创建一个画布视图,既可以将 SVG 路径转换为 ​​Android 路径,也可以拦截运动事件,将它们转换为 android 路径,同时也可以将它们存储为 SVG 路径。
  2. 在 onDraw() 中显示到屏幕的 Android 路径
  3. 将 SVG 路径写入 .svg 文件

保罗

于 2011-02-07T20:09:17.900 回答