0

私はこの機能を持っています:

public static Bitmap getResizedBitmap(Bitmap bm,Context c) {

    int width =(int) dp2px(bm.getWidth(),c);
    int height = (int) dp2px(bm.getHeight(),c);
    float scaleWidth = ((float) 250) / width;
    float scaleHeight = ((float) 170) / height;

    // create a matrix for the manipulation
    Matrix matrix = new Matrix();
    // resize the bit map
    matrix.postScale(scaleWidth, scaleHeight);
    // recreate the new Bitmap
    Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);

    return resizedBitmap;
}

dp2px は次のとおりです。

private static float dp2px(int dip, Context context){
    float scale = context.getResources().getDisplayMetrics().density;
    return dip * scale + 0.5f;
}

ほとんどの画面では問題ありませんが、たとえば、galaxy s3 では返されます。

java.lang.IllegalArgumentException: x+width は <= bitmap.width() でなければなりません

この行で:

Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
4

4 に答える 4

1

これをmanifest.xmlで使用します

 <supports-screens 
android:resizeable="true" 
android:smallScreens="true" 
android:normalScreens="true" 
android:largeScreens="true" 
android:anyDensity="true"/>

http://developer.android.com/guide/practices/screens_support.html

于 2012-09-24T08:56:43.390 に答える
0

dp を px に変換するには、次を使用できます。

int pixels = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) dp, context.getResources().getDisplayMetrics());
于 2012-09-24T08:56:25.283 に答える
0

ビットマップの範囲外のピクセルを取得しようとしていると不平を言っています。それは単なる丸めの問題かもしれません。おそらく、計算されwidthた値は実際のビットマップ幅よりも大きいピクセルです。関数にを追加しないとどう0.5fなりますdp2px()か?

于 2012-09-24T08:56:35.363 に答える
0

あなたのコードのほかに。マニフェストに応じてサポート画面タグを追加しましたか?

例:

<supports-screens android:normalScreens="true" android:resizeable="true"     android:anyDensity="true" android:largeScreens="true" android:smallScreens="true" android:xlargeScreens="true"></supports-screens>
于 2012-09-24T08:48:41.840 に答える