1

ほぼ 150 の画像フレームを使用して、フレームごとのアニメーションでアプリケーションを作成しています。アニメーションは、Handler を使用して Image ビューの背景イメージを変更することで再生されます。ハンドラー内で、フォルダー /mnt/sdcard/Android/data/ApplicationPackage から画像を取得し、次の方法で画像ビューの背景として動的に変更しています。

FileInputStream in;                       
in = new FileInputStream(mFrames.get(imgpos));                              
bitmap  = BitmapFactory.decodeStream(in); 
if (in != null)
{   
    in.close();
}

一部の画像ではビットマップの作成に時間がかかるため、ファイル入力ストリームのデコードに問題が発生します。画像ファイルのサイズは各画像でほぼ 40 KB 未満ですが、同じサイズのファイルの外部ディレクトリから画像をデコードするのにかかる時間は異なります。ファイルサイズと読み込みをサンプリングしようとしましたが、画像の鮮明さに直接影響します. 画像を外部フォルダからビットマップにロードし、すべての画像を同じ期間でロードするより良い方法を教えてください。

ありがとう、ティム

4

2 に答える 2

0

表示する前にビットマップをプリロードする必要があると思います...ビットマップの配列と、アクティビティに入るときにすべての画像をロードするバックグラウンドタスクを使用します。ハンドラーは、ビットマップのロードなどの時間のかかるタスクを実行することは絶対に許可されていません!

于 2012-08-27T10:22:48.123 に答える
0

ビットマップを作成する前に、画像を縮小できます。

public Bitmap decodeSampledBitmapFromPath(String path) 
{
    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, requiredWidth, requiredHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    Bitmap newBmap = BitmapFactory.decodeFile(path, options);

    return newBmap;
}

public int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) 
{
    int inSampleSize = 1;

    if (imageHeight > reqHeight || imageWidth > reqWidth) 
    {
        if (imageWidth > imageHeight) 
        {
            inSampleSize = Math.round((float)imageHeight / (float)reqHeight);
        } 
        else 
        {
            inSampleSize = Math.round((float)imageWidth / (float)reqWidth);
        }
    }
    return inSampleSize;
}

イメージが読み込まれるビューよりもはるかに大きい場合、このダウン スケーリングは実際にビットマップをより速く作成するのに役立ちます。また、スケーリングされBitmapたものは、ビットマップを直接作成するよりもはるかに少ないメモリしか必要としません。
inJustDecodeBoundsBitmapFactory.Options設定するtrueと、 を作成する前に高さと幅を取得できますBitmap。そのため、画像が必要以上に大きいかどうかを確認できます。はいの場合は、それらを必要な高さと幅にスケーリングしてから、そのBitmap.

お役に立てれば!

于 2012-08-27T10:42:56.330 に答える