1

画像ビューがあり、その上に画像を設定したい。イメージのサイズは 7,707,446 バイトです。レイアウトを設定しようとするたびに、アプリがクラッシュし、エラーがメモリ不足エラーです.誰かが私に解決方法を提案できます.xmlは次のとおりです:-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:scrollbars="none">

    <RelativeLayout

        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/image" >
    </RelativeLayout>
</ScrollView>

4

3 に答える 3

1
Bitmap picture=BitmapFactory.decodeFile("/sdcard...");
    int width = picture.getWidth();
    int height = picture.getWidth();
    float aspectRatio = (float) width / (float) height;
    int newWidth = 70;
    int newHeight = (int) (70 / aspectRatio);       
    picture= Bitmap.createScaledBitmap(picture, newWidth, newHeight, true);


public static Bitmap decodeImage(String arrayList_image) {

        URL aURL;

        try {

            aURL = new URL(arrayList_image);

            URLConnection conn = aURL.openConnection();

            conn.connect();

            InputStream is = conn.getInputStream();

            BufferedInputStream bis = new BufferedInputStream(is);

            bm = BitmapFactory.decodeStream(bis);

            bis.close();

            is.close();

            return bm;

        } catch (MalformedURLException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();
        }
        return null;
    }
于 2012-09-27T10:06:02.870 に答える
0

こんにちは、これを試して、デバイスに応じて画像を表示することをお勧めします。

Bitmap bmp = BitmapFactory.decodeResource(myContext.getResources(),drawableId);
            int w = bmp.getWidth();
            int h = bmp.getHeight();

            System.out.println("OrgWidth : " + w);
            System.out.println("orgHeight : " + h);

            int targetWidth = (screenWidth * w)/iPadWidth;
            int targetHeight = (screenHeight * h)/iPadHeight;

            System.out.println("TargetWidth : " + targetWidth);
            System.out.println("TargetHeight : " + targetHeight);

            int[] arrWidthHeight = {targetWidth,targetHeight};

            // This for Slove the out of Memory problem

            int newWidth = 110;
            int newHeight = 110;
            float scaleWidth = ((float) newWidth) / w;
            float scaleHeight = ((float) newHeight) / h;

            Matrix bMatrix = new Matrix();
            bMatrix.postScale(scaleWidth, scaleHeight);
            Bitmap resizedBitmap = Bitmap.createBitmap(bmp, 0, 0, w, h , bMatrix, true);

最初にリソースから画像を取得し、デバイスに応じて画像の新しい高さと幅を見つけ、ここでメモリ不足を解決する目的でこの画像をスケーリングした後。

これは、デバイスの高さと幅に応じて高さと幅を見つけるためのものです..

WindowManager winManager = (WindowManager) myContext.getSystemService(Context.WINDOW_SERVICE);
            screenWidth = winManager.getDefaultDisplay().getWidth();
            screenHeight = winManager.getDefaultDisplay().getHeight();

            System.out.println("Screen Width : " + screenWidth);
            System.out.println("Screen Height : " + screenHeight);

ビットマップを使用して、ipathwidth と ipathHeight のような画像の高さと幅の魔女を取得します。

于 2012-09-27T04:51:19.043 に答える
0

大きなビットマップを効果的にロードするを参照してください。

ダウンスケーリング係数を計算する関数を作成できます。

public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

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

そして、これを使用して、スケーリングされたビットマップをロードします。

public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
        int reqWidth, int reqHeight) {

    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeResource(res, resId, options);

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeResource(res, resId, options);
}

したがって、100x100 ピクセルのサムネイルを ImageView にロードする場合は、次のようにします。

mImageView.setImageBitmap(
    decodeSampledBitmapFromResource(getResources(), R.id.myimage, 100, 100)
);
于 2012-09-27T05:00:34.303 に答える