安卓高效存储两张相似图片。

3

手机应用程序的大小需要尽可能小。如果我有一张剑的图片,然后有一张非常相似的同样是剑的图片,只是我改变了颜色或者加了火焰或者改变了宝石的图片等等,如何以最有效率的方式存储这些内容?

一种可能的方法是以图像差异的形式存储。我只会存储图像的不同之处,然后在运行时将两个图像合并。我已经在图形设计stackexchange网站上发了一个问题,询问如何做到这一点。

另一种可能性是已经有apk或文件格式或方法可以在android中存储类似的图像。

有什么建议吗?有没有工具可以使用,以便将两个png文件生成差异文件或者存储类似图像的文件格式等等?


如果您想要最小化图像的大小并且使用PNG格式,那么您可能会对PNG优化感兴趣,以减小图像的大小。 - Michal Chudy
3个回答

0

我会在更高的层次上解决这个问题。例如,在运行时进行颜色变换(也许将图像存储为非常特定的颜色,比如一些丑陋的绿色,你知道它是要在运行时用白色、红色或蓝色等实际颜色修复的颜色)。然后,您可以在加载时生成几个图像缓冲区。

对于合成两个图像,只需将“珠宝”图像单独存储,并在基本剑上绘制它。同样,您可以在加载时创建一个新图像,或者只在运行时进行覆盖绘制。

这将有助于减少应用程序在闪存上的占用空间,但不会减少应用程序在活动时的内存占用。


0

我认为您存储两张图片之间的差异的想法非常好。

然后,您可以使用简单的熵编码器(例如Huffman)压缩生成的差异文件,如果与基础图像的相似性很重要,则很可能实现强大的压缩比。

如果相似性非常强,甚至可以尝试使用范围编码器,以实现每像素不到一位的性能。但是,这种差异可能仅在较大的图像(即高于12x12精灵的分辨率)中才会引起注意。

然而,这些想法需要您或其他人为您编写此类函数代码。这应该非常简单。


0
一个非常简单的方法是使用ImagePack(一个包含多个图像的图像),这样您就可以轻松利用PNG或JPG压缩算法来实现您的目的。然后在绘制之前拆分图像。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接