我不会把图像变成文件(我不知道我是否会这样做)。
图纸由定制的绘图程序(用户绘制)绘制。当我调整应用程序的大小时,绘图会消失,因为它没有被重绘。那是因为图像没有以任何方式记忆。我需要一个记忆图形的算法,因此可以在整个应用程序刷新后重新绘制。
我想到的一种算法是记住每个像素的位置和颜色。但我认为这不是一个好主意。
我目前正在使用Java,但我需要一种与语言无关的算法。不过,我会接受用代码解释的解决方案。
我应该使用什么算法来记忆整个绘图?
答案 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)
有很多选择。正如你所说,一个是记住图像像素。您还可以简单地记住生成绘图的所有用户操作,并在需要重建绘图时重放它们。
另一种方法,取决于绘图程序为用户提供的工具,将构建更紧凑的图像表示。例如,如果绘图程序仅提供绘制线的可能性,则可以记住线端点集(以及颜色,线粗细以及其他任何相关的线数据)。这以一种显而易见的方式推广到更大的几何图元集。
对于徒手绘图,您可以记住笔划路径以及当时设置的任何笔触设置。根据程序提供的笔画工具的复杂程度,这可能最终会比仅仅记住绘图像素更多的数据。但是,它确实允许在画布展开时缩放绘图。