为嵌入式地图应用程序存储图像
Posted
技术标签:
【中文标题】为嵌入式地图应用程序存储图像【英文标题】:storing images for embedded map application 【发布时间】:2010-02-14 17:07:33 【问题描述】:我有不同分辨率的栅格化地图,其中包含 15K/60K/240K 图片,每个图片大小为 256x256,并且我有可以显示地图的 .NET Compact Framework 应用程序。 但是将 300k 文件复制到 SD 卡需要很长时间,大约需要 35-60 小时(我只复制了 15K,大约需要 2 到 2.5 小时),而且我担心它会破坏 FAT16 文件系统(硬件不支持FAT32,所以我不能将 fat16 切换到 fat32)或者复制后一切都会很慢。
所有图片都是这样存储的:/mapdata/resresolution/xx_coord/yy_coord.png
任何可嵌入的数据库都可以帮助我吗?或者我应该将图像打包到像 /storage/res1/x12.zip 这样的 zip 文件中,并存档所有 y*.png?或者我应该使用所有这些图片创建 ISO 映像,然后将 iso 逐字节复制到 SD 中?
【问题讨论】:
所有图片的总文件大小是多少?您是在设备中(通过 USB 连接)时将它们复制到 SD 卡,还是使用读卡器? 总大小为 1200MB。我尝试使用外部读卡器、内部读卡器(在笔记本电脑中)和通过 USB 连接的设备复制它们 即使使用最慢的可用 SD 卡也不会超过 25 分钟。也许问题在于大量的小文件。尝试创建一个 ZIP 文件,看看复制速度是否更快。 @tomlog:是的,小文件的数量是问题所在。并且 zip 文件将被快速复制。这就是我的问题所在。我在问,我应该使用嵌入式数据库,还是应该即时解压缩这些 zip 文件。要显示地图,我需要 4 到 9 个文件(因此其中至少有 2 个来自不同的档案),而且我一切都很快完成了,比如说,在 1/10 秒内,在这 1/10 秒内操作系统应该访问 SD 卡,找到所需的文件夹,找到 2 个存档文件,打开句柄,我的软件应该从该存档中解压缩图像,将它们加载到位图中并在屏幕上显示所有内容。 【参考方案1】:FAT16 限制为 65,535 个簇,每个文件至少需要一个簇,这将排除仅使用平面文件的可能性。
我假设您的地图图块是只读的,所以我会为您控制的图块创建自定义文件格式(可能还有一个额外的好处是需要更多的努力分开,万一落入坏人之手)。
大概是这样的:
某种标题,因此您知道这是您的文件。 一个元组,其中包含从文件开头到“零”缩放级别的平铺的偏移量,其长度以字节为单位 用于缩放级别“1”的图块的偏移量和长度的四个元组 ... 4^(n) 个元组,用于缩放级别“n”的瓦片的偏移量和长度 实际的瓦片数据。查找给定图块的偏移量会相对轻量级,并在报告流结束时覆盖流以执行“正确的事情” - 您甚至可以对“无图块”图片使用相同的偏移量您正在对一个不完全适合正方形的区域进行编码(例如,英国)
【讨论】:
我没有想到这个想法。看起来像一个解决方案。谢谢!以上是关于为嵌入式地图应用程序存储图像的主要内容,如果未能解决你的问题,请参考以下文章