0

別のアプリケーションから取得した次のコードがあります

    public static Bitmap createBitMap(DicomObject dcmObj) {
    short[] image = dcmObj.getShorts(Integer.parseInt("7FE00010", 16));
    float wc = dcmObj.getFloat(Integer.parseInt("00281050", 16));
    float ww = dcmObj.getFloat(Integer.parseInt("00281051", 16));

    Bitmap bitMap = Bitmap.createBitmap(dcmObj.getInt(Tag.Columns), dcmObj
            .getInt(Tag.Rows), Bitmap.Config.ARGB_8888);
            bitMap.copyPixelsFromBuffer(LocalImport.makeBuffer((localImport
            .applyWindowing(image, wc, ww)), dcmObj.getInt(Tag.Columns),
            dcmObj.getInt(Tag.Rows)));
    return bitMap;
}

私がやろうとしているのは、SD カードからいくつかの Dicom 画像を読み込み、属性を読み取ってグリッドに表示することです。上記の関数はアプリケーションで正常に動作しますが、同じコードをアプリケーションに統合するとクラッシュします。デバッグを試みましたが、変数の値は同じです。

4

2 に答える 2

0

クラッシュの原因は、メイン UI のアニメーションが大量のメモリを占有していたためです。コードをコピーしたサンプル アプリケーションにはアニメーションがありません。

エミュレータに割り当てられたメモリのサイズを増やすと、問題が解決できると思います(まだ試してみてください)。

しかし、少なくとも、私が行っていない割り当て解除や論理エラーが原因ではないことはわかっています..

助けてくれてありがとう:)

于 2012-05-10T08:26:01.647 に答える
0

Android に変更が加えられるまで、VM 制限よりも大きなバッファーを割り当てる唯一の方法は、ネイティブ コードで割り当てることです。ネイティブ コードでは、Android の下にある Linux システムで物理的に利用可能なメモリを割り当てることができます。私自身のアプリケーションでこれをテストし、150MB を超えるビットマップを割り当てました。ネイティブ コードでビットマップを管理するには、ビットマップの「ビュー」を Java で管理されるディスプレイ サイズの画像にレンダリングするコードを記述する必要があります。

于 2012-05-09T21:34:12.570 に答える