读取 android 中的 ICO 文件以及所有子图像

Reading ICO file in android along with all sub-images

我发现 Is there a way to decode a .ICO file to a resolution bigger than 16x16? 是 2 年前的,最好的建议是使用 image4j。不幸的是,它在 android 下尤其(也)不起作用,因为 类 "IndexColorModel"、"BufferedImage" 和 "WritableRaster" 不可用。

虽然通过将 "BufferedImage" 替换为 "Bitmap" 来解决 "BufferedImage" 可能会起作用,但不使用 "WritableRaster",而是使用 setPixel 设置单个(或一组)像素可能会起作用好吧,我无法设法替换 "IndexColorModel",因为我无法绕过它。

我目前正在从一个网站下载网站图标,该网站通常在其中存储不止一张图片。图片大小不一。我阅读了 ICO 文件的结构并尽可能多地分析了 image4j。然而,我在重构各种 类 以不使用 AWT 时遇到了麻烦。

BitmapFactory 能够加载 ICO 文件;不幸的是,它只加载第一张图片(至少这是我的猜测),因此不允许我决定加载哪张图片(更不用说加载它们并让我选择了)。

有谁知道 2 年前是否有任何变化 and/or 是否有人愿意帮助我重构,例如来自 image4j 的 BMPDecoder? 或者是否有一种完全不同、更简单的方法?

我创建了一个基于 image4j 的库,它允许将 ICO 文件读入位图对象列表。与 image4j 相比,ico4a 不使用任何 AWT-类,而是仅使用 Bitmap / Bitmap.createBitmap.

参见https://github.com/divStar/ico4a

虽然库的性能可能不是最好的,因为它在循环中使用位图对象的 setPixel 方法,但它完成了工作,对我来说已经足够好了。

与 image4j 相比,我的库 (ico4a) 只有 decodes/reads 个文件。虽然保存 ICO 文件可能相对容易,但我没有这样做,因为我自己不需要它。

如果您对图书馆还有其他疑问或问题,请 post 在 gitHub 上提出,我会看看是否可以提供帮助。