4

メディア フレームをデコードするためのアプリを ffmpeg で開発しています。Bitmap オブジェクトにデコード結果を入力し、ImageView.setImageBitmap を使用してビットマップを表示します。Android 2.3 では問題なく動作しますが、Android 4.0 以降では動作しません。コードは単純です:

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

次に、ビットマップをファイルに書き込み、ファイルをリロードして表示しようとしました。

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);

動作しますが、パフォーマンスが低すぎます。それで、誰かが私が問題を解決するのを助けることができますか?

4

1 に答える 1

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));
于 2013-01-15T07:22:08.503 に答える