我有一个.net WinForms 2.0应用程序,目前有大约3000个图像的图像库。目前我正在使用SQLite并将所有图像存储为具有唯一ID的BLOB,以便于检索。
这样做的好处是,最终用户不必担心安装程序在其计算机上解压缩大量图像,并且在进行更新时,我可以推出单个文件供用户下载,即一切的新鲜副本。这些文件往往相当大(目前约为60兆字节),但最终用户已经习惯了,而且应用程序也为拨号上的用户提供了“无图像”模式。
所有这一切的一个缺点是生成库有时会有点棘手。数据必须转换为二进制格式,我必须确保相应的ID正确链接。生成库的作业也需要一段时间才能运行。
我正在升级应用程序,我想知道是否有更好的方法来执行此操作。我仍然希望保持单文件方法,以便于向用户发送更新并使计算机上的占用空间更小。是否有某种“可移植文件系统”或资源库可以使用/创建,这样我就可以轻松地从中插入/检索图像,而无需为应用程序提供数据库进行交互?
答案 0 :(得分:3)
resx文件(编译为资源dll)?或者更简单 - 一个zip文件?也许使用#ZipLib。
答案 1 :(得分:0)
7zip还有一个您也可以使用的库,请参阅this
此外,您可以将图像移动到Web服务器上并让客户端在本地缓存图像,然后让客户端定期检查更新的图像,这样只需要所需的图像下载。
您也可以为拨号用户提供低分辨率版本。
答案 2 :(得分:0)
我在类似情况下使用了ImageList控件和AddStrip方法。然后我有一个包含所有图像的巨型PNG文件。这对图标很有用,但不适用于其他类型的资源。
答案 3 :(得分:0)
根据您的具体情况,可能会出现自定义ISAM类型文件。
整体文件布局为:
---------------- | Count | int | ---------------- | Index | ---------- | Images | ----------
索引格式
---------------- | offset | int | ---------------- | size | int | --------------------------- | description | char(50) | --------------------------- | id | int | ----------------
计数是一个整数,包含文件中的图像数。索引将包含(偏移量,大小)对,描述要寻找的文件的偏移量以及从该偏移量开始读取的字节数。
此格式的缺点是替换现有图片需要重建文件。
固定长度的元数据(如描述和ID)可以放在标题中。
(如果你把索引保存在RAM中,这种疯狂方法的一个好处就是访问速度。)