1

画像を回転させる簡単なコードを検索して見つけました。イメージを ImageView オブジェクトからビットマップに引き出し、回転させてから元に戻しています。これが最も効果的な方法ではないことは承知していますが、CATCH ブロックでエラー メッセージが表示されずにクラッシュすることはないと思います。

これが私のコードです。渡される唯一の値は、回転させたい方向に応じて「r」または「l」です。小さい画像 (1500x1500 以下) は問題なく動作します。2500x2500 サイズあたりで状況が悪化します。

public void rotate(String dir)
{
    try
    {
        float angle = (dir.equals("r") ? 90 : -90);
        Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
        Matrix matrix = new Matrix();
        matrix.reset();
        matrix.postRotate(angle);
        bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
        imageView.setImageBitmap(bitmap);
    }
    catch(Exception e)
    {
        Utilities.logError(e.toString());
    }
}

なぜクラッシュしているのか、なぜ例外が発生しないのかについての手がかりはありますか? 「残念ながらプロセスが停止しました」というメッセージが表示され、アプリのウェルカム画面に戻ります。

ああ、キックのために角度を ZERO (ハードコード) に設定しましたが、クラッシュしませんでした。回転するのに時間がかかりすぎて、Android がフィットしているのではないかと思います。しかし、それを問題として確認する方法や、Androidにもう少し待つように指示する方法がわかりません。

回転のプレビュー画像を縮小しても、保存するときにフル サイズの画像を少なくとも 1 回回転する必要があり、同じ問題が発生します。しませんか?

4

1 に答える 1

2

ログを見なくても、メモリ不足の例外が発生していることはほぼ保証できます。

より小さな画像を使用するか、メモリをあまり消費しない別の方法で回転する必要があります (ここでは 2500x2500 のビットマップを同時に 2 つ割り当てています! それはトンです!)。

代わりに RotateAnimation を使用して効果を取得してみてください。

お役に立てれば :)

于 2013-09-26T05:39:32.097 に答える