Android 4.0 ImageView setImageBitmap不起作用

时间:2012-09-07 03:23:30

标签: android imageview

我开发了一个带有ffmpeg的应用程序来解码媒体帧。我用解码结果填充了一个Bitmap对象,并使用ImageView.setImageBitmap显示位图。 在Android 2.3中它运行良好,但在Android 4.0或更高版本中它不起作用。 代码很简单:

imgVedio.setImageBitmap(bitmapCache);//FIXME:in 4.0 it displays nothing

然后我尝试将Bitmap写入文件并重新加载文件以显示。

String fileName = "/mnt/sdcard/myImage/video.jpg";
FileOutputStream b = null;
try 
{
    b = new FileOutputStream(fileName);
    bitmapCache.compress(Bitmap.CompressFormat.JPEG, 100, b);// write data to file
} 
catch (FileNotFoundException e) 
{
    e.printStackTrace();
} finally 
{
    try 
    {
        if(b != null)
        {
            b.flush();
            b.close();
        }
    }
    catch (IOException e) 
    {
        e.printStackTrace();
    }
}
Bitmap bitmap = BitmapFactory.decodeFile(fileName);
imgVedio.setImageBitmap(bitmap);

它有效,但性能太差。 那么有人可以帮我解决问题吗?

1 个答案:

答案 0 :(得分:14)

我认为这是一个内存不足问题,您可以使用此方法修复它:

private Bitmap loadImage(String imgPath) {
    BitmapFactory.Options options;
    try {
        options = new BitmapFactory.Options();
        options.inSampleSize = 2;
        Bitmap bitmap = BitmapFactory.decodeFile(imgPath, options);
        return bitmap;
    } catch(Exception e) {
        e.printStackTrace();
    }
    return null;
}

" inSampleSize"选项将返回较小的图像并节省内存。你可以在ImageView.setImageBitmap中调用它:

imgVedio.setImageBitmap(loadImage(IMAGE_PATH));