有没有办法将.ICO文件解码为大于16x16的分辨率?

时间:2013-09-07 23:18:00

标签: java android bitmap ico

我正在开发android并试图从ImageView上的网站下载并显示一个favicon(.ICO)。

到目前为止,我已经设法使用HTTP连接从网站读取.ico,将其作为InputStream检索。然后我使用BitmapFactory将流解码为Bitmap并将其显示在ImageView上。这是代码:

 public Bitmap getBitmapFromURL(URL src) {           
        try {

            URL url = new URL("http", "www.google.com", "/favicon.ico");

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();                

            connection.setDoInput(true);       

            connection.connect();               

            InputStream input = connection.getInputStream();    

            BitmapFactory.Options options = new BitmapFactory.Options();

            Bitmap myBitmap = BitmapFactory.decodeStream(input, null, options);  

            return myBitmap;

        } catch (IOException e) {               
            e.printStackTrace();                
            return null;                
        }
    }

问题是inputStream的解码总是返回一个小的16x16位图。如果我很好理解,单个.ICO文件可以存储不同的图像分辨率,如32x32和64x64。我的问题是,有没有办法解码32x32或64x64位图而不是16x16?

另外,如果没有BitmapFactory的解决方案,是否有库或ja​​va代码来执行此操作?

注意:我不想调整位图的大小,我想要一个32x32(或更大)的分辨率,而不会通过拉伸来降低图像质量。

提前致谢。

2 个答案:

答案 0 :(得分:2)

我知道这个问题是3年前提出的,但是我遇到了同样的问题,并将image4j的一部分改编成了ico4a,你可以在这里找到:https://github.com/divStar/ico4a(我自己写了因为我想要加载来自favicon的最大图像;因为image4j使用AWT类,这对于Android来说不容易获得,所以我这样做了ico4a主要使用原生的android类。)

它可以将大多数有效的ICO文件解码为Bitmap对象列表。我相信库本身或示例应用程序也有一个方法来检索最大的Bitmap对象。

但是,我的图书馆无法编写ICO文件;它只能读取它们。尽管使用了一些内置的Android功能,您仍可以将各个图像轻松保存为PNG或JPEG图形。

答案 1 :(得分:1)

favicon文件可能包含多个图标,通常是16x16中的一个,32x32中的一个。这将在以下主题中讨论:How to have multiple favicon sizes, yet serve only a 16x16 by default?

Google的favico就属于这种情况。如果您尝试下载文件www.google.com/favicon.ico并使用 IrfanView 等应用程序打开它,则可以看到有两个图标(16x16和32x32)。

要回答您的问题,您应该使用适当的库来提取多个图标,例如 image4j ,然后选择您需要的图标。

http://image4j.sourceforge.net/