将下载的图像从位图转换为png / jpeg,并在imageView - Android中显示

时间:2014-10-15 14:32:04

标签: java android bitmap

我目前有下面的代码,它转到指定的网址,下拉任何图像,将其转换为位图,然后在imageView中显示它。

但是,我注意到当我滚动浏览包含这些位图的listView时;滚动变得不稳定(因为正在渲染多个位图)。

我的问题是。考虑到下面的代码,我如何将下载的位图转换为png / jpeg格式并在imageView中显示?因此listView的滚动将不再是生涩。

我不想将其保存到文件中,然后从手机加载该文件,因为一次可能会下载100多张图片。

位图代码:

//This downloads the image from thr url passed, and converts into a bitmap format; so that android compilers can read it and then display it.
private Bitmap GetImageBitmapFromUrl(string url)
{
    Bitmap imageBitmap = null;

    // bmp.compress(Bitmap.CompressFormat.PNG, 100, out); //100-best quality

    using (var webClient = new WebClient())
    {
        var imageBytes = webClient.DownloadData(url);
        if (imageBytes != null && imageBytes.Length > 0)
        {
            imageBitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);                   
        }
    }

    return imageBitmap;
}

我如何将它绑定到imageView:

var imageBitmap = GetImageBitmapFromUrl(item.imgURL);
view.FindViewById<ImageView>(Resource.Id.Image).SetImageBitmap((Bitmap.CreateScaledBitmap(imageBitmap, 100, 100, false)));

2 个答案:

答案 0 :(得分:0)

我玩过loooooooooads试图让它高效工作,我还没有找到一个足够好的解决方案,除了保存它们。基本上,您可以尝试保存所有然后可能在渲染发生后设置删除,或者可能在所有图像都已渲染后?我将所有图像保存在我的SD卡上,但它们每个只有100kb,但我确实每个“使用”中有400个,但在8gb SD卡上仍然只有40mb。

答案 1 :(得分:0)

图像的急动与用于显示图像的格式无关。将图像设置为ImageView时,无论如何它们都会在内部转换为位图。这里的核心是确保您不使用大于您需要的图像。例如,如果您的ImageView宽度为100x100像素并且您正在下载1000x1000像素的图像,则将其设置为ImageView可用于显示目的,但会使用太多内存。相反,您应下载图像,缩放图像以匹配ImageView的大小,然后回收原始位图。

由于内存占用空间小得多,所以急躁不太明显。