2012-04-26 70 views
0

我正在编写一个程序来保存互联网上的图像,但其中一些图像最终呈灰色。或者它只是真正的灰色图标,因为如果我打开图像,它不是灰色的。从URL保存的图像部分是灰色的

这里是我用来保存图片的方法:

public static void saveImage(String imageUrl, String destinationFile) throws IOException{ 
    URL url = new URL(imageUrl); 
    InputStream is = url.openStream(); 
    OutputStream os = new FileOutputStream(destinationFile); 

    byte[] b = new byte[2048]; 
    int length; 

    while ((length = is.read(b)) != -1) { 
     os.write(b, 0, length); 
    } 

    is.close(); 
    os.close(); 
} 

我相信问题是,即时通讯关闭流之前的图像已经被完全写入。有没有什么方法可以检查它是否完成或者什么?

+0

代码看起来不错。 “图标”是什么意思?您可以在完成写入之前提供图片/图标吗?您想等到saveImage方法完成。 – Thilo 2012-04-26 11:05:35

回答

1

当您在Windows资源管理器中打开该文件夹并在您的代码正在写入图像的同时进行刷新时,会发生此行为。 Windows将尝试创建缩略图。在文件的第一部分中存储了所有“headerinfo”,因此窗口将知道图像的大小以及所有这些。由于并非所有数据都存在,该部分的缩略图将变为灰色。

+0

啊,你说得对,现在在这里问我感觉很愚蠢> _ < – Topsic 2012-04-26 11:11:00

+0

不觉得傻。我花了一些时间才发现这种行为:) – amaters 2012-04-26 11:12:38