Android 存储手写体的最佳策略

Android 存储手写体的最佳策略,android,vector,vector-graphics,handwriting,Android,Vector,Vector Graphics,Handwriting,我正在编写一个移动应用程序(Android),允许用户使用单触式设备以1像素的精度“写入”画布。该应用程序将在平板电脑设备上运行,该设备的尺寸约为标准的8 1/2英寸x 11英寸。我的策略是将“文本”存储为矢量数据,因为输入设备的每个笔划基本上都是一个矢量,由起点、终点和一些中间点组成,这些中间点有助于定义矢量的形状(由触摸屏/OS在触摸移动时生成)。这应该允许我跟踪笔划的放置顺序(以支持撤消等),并具有足够的灵活性,允许像任何其他矢量图形一样重新调整文本大小等 但是,使用高精度的输入设备和大屏

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

但是,使用高精度的输入设备和大屏幕,进行一些非常粗略的信封背面计算,这样您就可以一对一地模拟标准纸质记事本,这意味着您每页文本将有1700个笔划。在最坏的情况下,每个笔划可以由多达20-30个独立点(笔划的每个像素大约一个点)组成,这意味着每页约50000个数据点。。。当重新加载页面和重新创建矢量笔划时,SQLite/Android无法处理任何可靠性预期(我不得不想象,从SQLite db中提取50000多个结果将超过游标窗口)

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

有没有关于如何更有效地解决这个问题的建议

谢谢


保罗

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

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

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


此外,我对android游标限制不太熟悉,但SQL查询总是可以被重写以将结果分割成若干部分(通过limit…OFFSET)。

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

  • 创建一个画布视图,既可以将SVG路径转换为Android路径,也可以截获运动事件,将它们转换为Android路径,同时还可以将它们存储为SVG路径
  • 在onDraw()中显示屏幕的Android路径
  • 将SVG路径写入.SVG文件

  • Paul

    我使用矢量进行存储,这样我就可以轻松地转换/缩放数据,从设备导出数据,并能够在其他应用程序中编辑数据,等等。自从发布这个问题以来,我已经了解了如何在Android中表示矢量,以及如何高效地存储矢量;基本上是SVG路径。我将很快发布一个完整的“答案”,详细说明这一点。谢谢你的意见。