我正在尝试开发移动应用程序,我想知道将图像转换为文本文件的最简单方法,然后能够在内存中重新创建文本。有问题的图像将包含不超过16种左右的颜色,因此效果会很好。
基本上,强制使用此解决方案需要将每个人的像素颜色数据保存到文件中。但是,这会导致巨大的文件。 我知道有更好的方法 - 比如,如果图像的大部分由相同颜色组成,则将区域分成较小的正方形和矩形,并将其坐标和大小保存到文件中。 < / p>
这是一个例子。图像应该只是黑/白。大颜色框表示输出文本文件中的理论“数据点”。这些盒子确实会说明它们的来源,大小以及应该是什么颜色。
例如,顶盒的原点为0,0,大小为359,48,它代表黑色。 保存在文本文件中,数据为0,0,359,48,0。
这会是什么样的算法?
注意:我使用的SDK无法从X,Y坐标返回像素的颜色。但是,我可以从文本文件中将外部信息加载到程序中,并以这种方式对其进行操作。我需要导出到文本文件的数据来自不同的实用程序,该实用程序可以从X,Y坐标获取像素的颜色。
编辑:添加了一张图片 EDIT2:添加了约束
答案 0 :(得分:1)
您能详细说明为什么要将图像(或其部分)保存为纯文本吗?你不能使用二进制表示法吗?此外,如果图像通常具有大量相同颜色的连续像素运行,则可能需要使用所谓的游程编码(RLE)。或者,可以使用Lempel-Ziv-something压缩算法之一(LZ77,LZ78,LZW)。
答案 1 :(得分:0)
将图像压缩为压缩格式(例如JPEG,PNG,GIF等),然后将其另存为.txt文件或其他内容。要重新创建图像,只需使用适合您特定需求的任何库函数将文件读入您的程序。
如果.txt文件必须具有某些文字含义,那么您可能会遇到麻烦。
答案 2 :(得分:0)
在cs中有一种类似空间索引的算法,用于recursivley将平面细分为4个图块。如果单元格大小相同,则看起来像四叉树。如果您希望将平面细分为图案(颜色),可以使用此平铺构思动态更改单元格的大小。一个好的开始是z曲线或希尔伯特曲线。