算法:记住绘图

时间:2012-11-25 16:37:20

标签: algorithm language-agnostic drawing

我不会把图像变成文件(我不知道我是否会这样做)。

图纸由定制的绘图程序(用户绘制)绘制。当我调整应用程序的大小时,绘图会消失,因为它没有被重绘。那是因为图像没有以任何方式记忆。我需要一个记忆图形的算法,因此可以在整个应用程序刷新后重新绘制。

我想到的一种算法是记住每个像素的位置和颜色。但我认为这不是一个好主意。

我目前正在使用Java,但我需要一种与语言无关的算法。不过,我会接受用代码解释的解决方案。

我应该使用什么算法来记忆整个绘图?

2 个答案:

答案 0 :(得分:3)

您可以记住用户的操作:例如,如果他/她绘制一条线,则记住起始和结束地址。如果他/她绘制免提图纸,那么你就会记住单个像素(你必须!)。

这允许通过操纵坐标来调整任何绘图的大小,旋转等。

然后,“绘图”成为一系列动作:

{
    LINE_DRAWING,
    x1, y1, x2, y2,
    pen, color, thickness...
}
{
    ...
}

要重绘,只需扫描相同的列表并再次调用相应的子例程。根据语言,您可以将列表表示为数组,链接列表,双向链接列表,并实现元素删除等功能。

在档案中,我会建议某种标记格式:

two bytes - element type
four bytes - this element's length
variable-size data depending on element type

同样,要“加载”绘图,您只需按顺序扫描文件并填充内存结构。

您可以谷歌'矢量绘图'了解更多详情和提示。

答案 1 :(得分:2)

有很多选择。正如你所说,一个是记住图像像素。您还可以简单地记住生成绘图的所有用户操作,并在需要重建绘图时重放它们。

另一种方法,取决于绘图程序为用户提供的工具,将构建更紧凑的图像表示。例如,如果绘图程序仅提供绘制线的可能性,则可以记住线端点集(以及颜色,线粗细以及其他任何相关的线数据)。这以一种显而易见的方式推广到更大的几何图元集。

对于徒手绘图,您可以记住笔划路径以及当时设置的任何笔触设置。根据程序提供的笔画工具的复杂程度,这可能最终会比仅仅记住绘图像素更多的数据。但是,它确实允许在画布展开时缩放绘图。